我正在尝试以下模式:
[,;\" ](.+?\/.+?)[\",; ]
在以下字符串中:
[&#39;&#34;的 text / html的, 应用/ XHTML + xml的 下,的应用/ XML < /strong>;q=0.9;q = 0.8&#34;&#39;]
它与粗体文本匹配,但不与斜体文本匹配。为什么呢?
我想提取text/html
,application/xhtml+xml
和application/xml
。它提取第一和第三,但不提取中间
答案 0 :(得分:1)
您的上一个[,"; ]
在,
之后消耗text/html
,因此,在下一次迭代中,当正则表达式引擎搜索匹配时,第一个[,;" ]
无法匹配逗号。因此,你输了一场比赛。
您可以将尾随[,"; ]
转换为非消费模式,前瞻性或更好,因为匹配不能包含分隔符,请使用否定字符类方法:
[,;" ]([^/,;" ]+/[^/,;" ]+)
请参阅regex demo。如果预期匹配中可以有多个/
,请从第二个字符类中删除/
个字符。
<强>详情
[,;" ]
- 逗号,;
,"
或空格([^/,;" ]+/[^/,;" ]+)
- 第1组:任何一个或多个不是/
,,
的字符。 ;
,"
和空格,/
以及任何一个或多个不是/
,,
的字符。 ;
,"
和尽可能多的空间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']