测试:
1. 'Product: aab bbc; Product: xyz pqr; Junk1: jjkk jjuu; Junk2: nnnkk junk; Junk3: lkie rnier rae'
2. 'Product: Fuasdcsen'
3. 'Product: marlwaw Swwō'
4. 'Product: aab bbc abc xyz; Product: xyz pqr; Junk1: jjkk jjuu; Junk2: nnnkk junk; Junk3: lkie rnier rae'
输出:
1. ['aab bbc', 'xyz pqr']
2. ['Fuasdcsen']
3. ['marlwaw Swwō']
4. ['aab bbc abc xyz', 'xyz pqr']
我只想要产品名称列表。因此,到目前为止,我想出了这个正则表达式r'Product:\ s *(。*)(?:; | $)',但它仅适用于单个Products(案例2和3)。有人可以为所有人提出一般解决方案。我正在尝试提取:和;(如果存在)之间的详细信息。
In [10]: reg_str = 'Product: marlwaw Swwō xyz abc'
In [11]: re.findall(r'Product:\s*(.*)(?:;|$)', reg_str)
Out[11]: ['marlwaw Swwō xyz abc']
答案 0 :(得分:4)
您的正则表达式很贪婪,这使得它可以抓住从那里看到的所有内容。使其不贪婪:
import re
reg_str = 'Product: aab bbc; Product: xyz pqr; Junk1: jjkk jjuu; Junk2: nnnkk junk; Junk3: lkie rnier rae'
print(re.findall(r'Product:\s*(.*?)(?:;|$)', reg_str))
# ['aab bbc', 'xyz pqr']
答案 1 :(得分:0)
尝试使用:
reg = /(ARTIST_NAME1|ARTIST_2|ETC...)/
您可以通过在管道符号上加入一个列表来创建它。