【发布时间】:2014-02-27 14:31:21
【问题描述】:
我有以下正则表达式模式:
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'
它确实匹配并抓取所有内容。
【问题讨论】:
-
请务必包含输入样本;什么应该匹配,什么不应该匹配?你期望什么输出?
-
几个 cmets:1。
(?P<gift_wrap>\d+)将匹配数字,而不是No2。Total\sPrice:不会匹配Total:3。你确定你的换行符都是\n而不是\r吗?顺便说一句,如果您不使用^$锚点,则不需要多行标志。 -
正确的 1 和 2,仍然不起作用,我在应用正则表达式之前从文本中删除了所有的 \r。
-
1。删除
\r后,您检查了我假设的换行符没有消失吗?此外,您应该编辑您的问题以反映您的更改(之前的 1 和 2),这有点误导。 2 你的正则表达式匹配很奇怪,但只捕获了第一组......你如何尝试检索它们? -
这就是我检索它们的方式:re.finditer(pattern, plain, re.M | re.X) 但使用 findall 会产生相同的结果。
标签: python regex regex-group