正则表达式模式不匹配连续组
regex pattern not matching continuous groups
我正在尝试以下模式:
[,;\" ](.+?\/.+?)[\",; ]
在以下字符串中:
['""text/html,application/xhtml+xml ,application/xml;q=0.9;q
=0.8"']
它匹配粗体文本,但不匹配斜体文本。为什么?
我想提取 text/html
、application/xhtml+xml
和 application/xml
。它正在提取第一个和第三个而不是中间的
你的最后一个 [,"; ]
消耗了 text/html
之后的 ,
因此,在下一次迭代中,当正则表达式引擎搜索匹配项时,第一个 [,;" ]
不能匹配那个逗号。因此,你输了一场。
您可以将尾随 [,"; ]
转换为 non-consuming 模式、正向预测或更好,因为匹配不能包含定界符,请使用否定字符 class 方法:
[,;" ]([^/,;" ]+/[^/,;" ]+)
参见regex demo。如果在预期的匹配中可以有超过 1 个 /
,从第二个字符 class.
中删除 /
个字符
详情
[,;" ]
- 逗号、;
、"
或 space
([^/,;" ]+/[^/,;" ]+)
- 第 1 组:任何一个或多个不是 /
、,
的字符。 ;
、"
和 space、/
,然后是 /
、,
之外的任何一个或多个字符。 ;
、"
和 space 尽可能多
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']
我正在尝试以下模式:
[,;\" ](.+?\/.+?)[\",; ]
在以下字符串中:
['""text/html,application/xhtml+xml ,application/xml;q=0.9;q =0.8"']
它匹配粗体文本,但不匹配斜体文本。为什么?
我想提取 text/html
、application/xhtml+xml
和 application/xml
。它正在提取第一个和第三个而不是中间的
你的最后一个 [,"; ]
消耗了 text/html
之后的 ,
因此,在下一次迭代中,当正则表达式引擎搜索匹配项时,第一个 [,;" ]
不能匹配那个逗号。因此,你输了一场。
您可以将尾随 [,"; ]
转换为 non-consuming 模式、正向预测或更好,因为匹配不能包含定界符,请使用否定字符 class 方法:
[,;" ]([^/,;" ]+/[^/,;" ]+)
参见regex demo。如果在预期的匹配中可以有超过 1 个 /
,从第二个字符 class.
/
个字符
详情
[,;" ]
- 逗号、;
、"
或 space([^/,;" ]+/[^/,;" ]+)
- 第 1 组:任何一个或多个不是/
、,
的字符。;
、"
和 space、/
,然后是/
、,
之外的任何一个或多个字符。;
、"
和 space 尽可能多
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']