正则表达式模式不匹配连续组

时间:2018-03-11 17:55:07

标签: python regex regex-group

我正在尝试以下模式:

[,;\" ](.+?\/.+?)[\",; ]

在以下字符串中:

[&#39;&#34;的 text / html的 应用/ XHTML + xml的 下,的应用/ XML < /strong>;q=0.9;q     = 0.8&#34;&#39;]

它与粗体文本匹配,但不与斜体文本匹配。为什么呢?

我想提取text/htmlapplication/xhtml+xmlapplication/xml。它提取第一和第三,但不提取中间

1 个答案:

答案 0 :(得分:1)

您的上一个[,"; ],之后消耗text/html,因此,在下一次迭代中,当正则表达式引擎搜索匹配时,第一个[,;" ]无法匹配逗号。因此,你输了一场比赛。

您可以将尾随[,"; ]转换为非消费模式,前瞻性或更好,因为匹配不能包含分隔符,请使用否定字符类方法:

[,;" ]([^/,;" ]+/[^/,;" ]+)

请参阅regex demo。如果预期匹配中可以有多个/,请从第二个字符类中删除/个字符。

<强>详情

  • [,;" ] - 逗号,;"或空格
  • ([^/,;" ]+/[^/,;" ]+) - 第1组:任何一个或多个不是/,的字符。 ;"和空格,/以及任何一个或多个不是/,的字符。 ;"和尽可能多的空间

Python demo

import re
rx = r'[,;" ]([^/,;" ]+/[^/,;" ]+)'
s = """['"text/html,application/xhtml+xml,application/xml;q=0.9;q =0.8"']"""
res = re.findall(rx, s)
print(res) # => ['text/html', 'application/xhtml+xml', 'application/xml']