我有以下正则表达式模式:
pattern = r'''
(?P<name>.+?)\n
SKU\s#\s+(?P<sku_hidden>\d+)\n
Quantity:\s+(?P<quantity>\d+)\n
Gift\sWrap:\s+(?P<gift_wrap>.+?)\n
Shipping\sMethod:.+?\n
Price:.+?\n
Total:\s+(?P<total_price>\$[\d.]+)
'''
我使用以下方法检索它们:
re.finditer(pattern, plain, re.M | re.X)
但是使用 re.findall
会产生相同的结果。
它应该匹配这样的文本:
Red Retro Citrus Juicer
SKU # 403109
Quantity: 1
Gift Wrap: No
Shipping Method:Standard
Price: $24.99
Total: $24.99
发生的第一件事是使用 re.M
和 re.X
它不起作用,但如果我将它们全部放在一行中,它就可以了。另一件事是,当它起作用时,只有第一组被捕获,其余的被忽略。有什么想法吗?
其他信息:
如果我将模式更改为:
pattern = r'''
(?P<name>.+?)\n
SKU\s#\s+(?P<sku_hidden>\d+)\n
'''
我的输出结果如下:[u'Red Retro Citrus Juicer']
它匹配,但 SKU 未出现。如果我将所有内容放在同一行,如下所示:
pattern = r'(?P<name>.+?)\nSKU\s#\s+(?P<sku_hidden>\d+)\n'
它确实匹配并抓取所有内容。
最佳答案
当使用X
标志时,您需要转义#
,它开始注释。
现在你的两行正则表达式相当于
(?P<name>.+?)\n
SKU\s
你想要的是
pattern = r'''
(?P<name>.+?)\n
SKU\s\#\s+(?P<sku_hidden>\d+)\n
Quantity:\s+(?P<quantity>\d+)\n
Gift\sWrap:\s+(?P<gift_wrap>.+?)\n
Shipping\sMethod:.+?\n
Price:.+?\n
Total:\s+(?P<total_price>\$[\d.]+)
'''
注意\#
...
关于python - 正则表达式没有抓取所有组,不能在多行中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22071517/