这是一个字符串示例,数字后的空格可能不同。
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)
答案 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)
可以在不使用正则表达式的情况下完成此示例,先在\n
和actual_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}}