如何构建正则表达式来查找以\ n和字母开头以及以数字或单词结尾的单词?

时间:2019-04-16 15:07:40

标签: python regex python-3.x

这是一个字符串示例,数字后的空格可能不同。

product_list = 'Buy:\n Milk \nYoughurt 4 \nBread  \nSausages 4     \nBanana '

我想用以下输出构建一个正则表达式:

import re

re.findall(r'some pattern', product_list)
['Milk', 'Youghurt 4', 'Bread', 'Sausages 4', 'Banana']

这就是我认为的样子。但是,它返回空列表:

re.findall(r'\n(\w+\w$))', product_list)

3 个答案:

答案 0 :(得分:1)

以下脚本的方法是首先剥离开头的term:\n,在这种情况下为Buy:\n。然后,我们将re.findall与以下模式一起使用以查找所有匹配项:

(.+?)\s*(?:\n|$)

这表示要捕获直到第一个可选的空白字符为止的所有内容,然后再跟换行符或字符串的结尾。

product_list = 'Buy:\n Milk \nYoughurt 4 \nBread  \nSausages 4     \nBanana '
product_list = re.sub(r'^[^\s]*\s+', '', product_list)

matches = re.findall(r'(.+?)\s*(?:\n|$)', product_list)
print(matches)

['Milk', 'Youghurt 4', 'Bread', 'Sausages 4', 'Banana']

答案 1 :(得分:1)

如果可以保证类似的输入模式,我建议使用非正则表达式(正则表达式似乎很昂贵):

list(map(lambda x: x.strip(), product_list.split('\n')))[1:]

代码

product_list = 'Buy:\n Milk \nYoughurt 4 \nBread  \nSausages 4     \nBanana '

print(list(map(lambda x: x.strip(), product_list.split('\n')))[1:])
# ['Milk', 'Youghurt 4', 'Bread', 'Sausages 4', 'Banana']

答案 2 :(得分:0)

可以在不使用正则表达式的情况下完成此示例,先在\nactual_list = 'Buy:\n Milk \nYoughurt 4 \nBread \nSausages 4 \nBanana ' product_list = actual_list.split(':')[1] processed_list = [product.strip() for product in product_list.split('\n') if product.strip() != ''] print(processed_list) #['Milk', 'Youghurt 4', 'Bread', 'Sausages 4', 'Banana'] 上分割

{{1}}