我有一个从数据库出口,其中包含产品数据.每种产品的分隔使用逗号,但一些产品名称也包含逗号.

因此,我们的结局是一团糟,比如:

13371337:Bat,TH,Li-Met,Blub,9.5V,370mAHr,1/2_AA-Cell,50pcs,13351234:Radio - Antenna 2.4 GHz AB/C midi (10p),15642345:Board SMB - Some Magic Board,95653345:Board SMK 6 - Some Magic Knobs - Mod6,56735632:Control Unit Z65 - Mod9

我需要一个正则表达式,它将拆分为:

13371337:Bat,TH,Li-Met,Blub,9.5V,370mAHr,1/2_AA-Cell,50pcs

13351234:Radio - Antenna 2.4 GHz AB/C midi (10p)

15642345:Board SMB - Some Magic Board

95653345:Board SMK 6 - Some Magic Knobs - Mod6

56735632:Control Unit Z65 - Mod9

我最终得到了一个正则表达式[0-9]{5,9},它可以很好地分隔产品编号.

然后我try :[0-9]{5,9}[^@]+,由于增加了逗号,它只与第一个字符串部分匹配.

有没有办法也包括上面所示的以下字符串?

推荐答案

您try 的正则表达式[0-9]{5,9}[^@]+匹配5-9个数字,后跟@个字符以外的1个或多个字符(这也可以匹配数字,并且示例数据中没有@个字符)


您可以通过在开头应用单词边界并匹配数字后面的冒号来使正则表达式更具体.

将其用作匹配的开始,然后尽可能少地匹配字符,直到该模式下一次出现,或者在最后一次出现时断言字符串的结尾.

\b[0-9]{5,9}:.*?(?=,\b[0-9]{5,9}:|$)

Python demo.com/r/Isap8J/1" rel="nofollow noreferrer">regex matches号和Python demo号.

import re

s = "13371337:Bat,TH,Li-Met,Blub,9.5V,370mAHr,1/2_AA-Cell,50pcs,13351234:Radio - Antenna 2.4 GHz AB/C midi (10p),15642345:Board SMB - Some Magic Board,95653345:Board SMK 6 - Some Magic Knobs - Mod6,56735632:Control Unit Z65 - Mod9"
pattern = r"\b[0-9]{5,9}:.*?(?=,\b[0-9]{5,9}:|$)"
result = re.findall(pattern, s)
print(result)

如果您必须使用re.plit,则可以使用单词边界重新开始模式,并声明左侧不是字符串的开头.这将防止匹配恰好在第一个匹配项之前的位置,在拆分时,将在结果列表中返回一个空条目.

然后断言模式中开始所有独立部分的部分(如Wiktor Stribiżew的注释中所建议的),这将为您提供拆分的位置.

Python demo.com/r/Jje2Sy/1" rel="nofollow noreferrer">regex matches号和Python demo号.

pattern = r"\b(?<!^)(?=[0-9]{5,9}:)"
result = re.split(pattern, s)
print(result)

这两个代码示例都将输出:

输出

[
 '13371337:Bat,TH,Li-Met,Blub,9.5V,370mAHr,1/2_AA-Cell,50pcs',
 '13351234:Radio - Antenna 2.4 GHz AB/C midi (10p)',
 '15642345:Board SMB - Some Magic Board',
 '95653345:Board SMK 6 - Some Magic Knobs - Mod6',
 '56735632:Control Unit Z65 - Mod9'
]

Python相关问答推荐

如何在箱形图中添加绘制线的传奇?

Polars:用氨纶的其他部分替换氨纶的部分

Python解析整数格式说明符的规则?

在极性中创建条件累积和

使用密钥字典重新配置嵌套字典密钥名

NumPy中条件嵌套for循环的向量化

将JSON对象转换为Dataframe

Plotly Dash Creating Interactive Graph下拉列表

未调用自定义JSON编码器

合并与拼接并举

基于另一列的GROUP-BY聚合将列添加到Polars LazyFrame

将CSS链接到HTML文件的问题

Pandas在rame中在组内洗牌行,保持相对组的顺序不变,

利用SCIPY沿第一轴对数组进行内插

文本溢出了Kivy的视区

我怎样才能让深度测试在OpenGL中使用Python和PyGame呢?

使用美汤对维基百科表格进行网络刮擦未返回任何内容

解析CSV文件以将详细信息添加到XML文件

如何在Python中画一个只能在对角线内裁剪的圆?

在Django REST框架中定义的URL获得404分