正则表达式从字符串名称列表

时间:2019-02-16 03:17:53

标签: python regex python-3.x

测试:

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']

2 个答案:

答案 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...)/

您可以通过在管道符号上加入一个列表来创建它。