python - 正则表达式没有抓取所有组,不能在多行中工作

标签 python regex regex-group

我有以下正则表达式模式:

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.Mre.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/

相关文章:

python - 有没有一种方法可以检测某个像素的 RGB 值并在 if 条件下使用它?

javascript - 正则表达式 - 从结果中删除方括号

python - 为什么我的 Python 正则表达式找到两个匹配项?

sql - 如何在bigquery中将正则表达式与JSON_EXTRACT结合使用

python - 用于捕获两个子字符串之间的字符串的正则表达式

regex - scala 正则表达式组匹配和替换

Python: super 和 __init__() 与 __init__( self )

python - 使用 pandas 使用列中的值格式化字符串

python - 与 FLANN 进行特征匹配时出现 OpenCV 错误

python - 用于匹配 "01.0 to 60.0 in steps of 0.5, or 99.9"的正则表达式?