我有以下正则表达式模式:
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'
它匹配并抓住一切。
答案 0 :(得分:1)
使用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.]+)
'''
请注意\#
...