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

regex pattern not matching continuous groups

我正在尝试以下模式:

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

在以下字符串中:

['""text/html,application/xhtml+xml ,application/xml;q=0.9;q =0.8"']

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

我想提取 text/htmlapplication/xhtml+xmlapplication/xml。它正在提取第一个和第三个而不是中间的

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

您可以将尾随 [,"; ] 转换为 non-consuming 模式、正向预测或更好,因为匹配不能包含定界符,请使用否定字符 class 方法:

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

参见regex demo。如果在预期的匹配中可以有超过 1 个 /,从第二个字符 class.

中删除 / 个字符

详情

  • [,;" ] - 逗号、;" 或 space
  • ([^/,;" ]+/[^/,;" ]+) - 第 1 组:任何一个或多个不是 /, 的字符。 ;" 和 space、/,然后是 /, 之外的任何一个或多个字符。 ;" 和 space 尽可能多

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']