gpt4 book ai didi

python - 为什么这两个 python 正则表达式会产生不同的结果?

转载 作者:行者123 更新时间:2023-11-30 22:51:14 26 4
gpt4 key购买 nike

>>> re.match(r'"([^"]|(\\\"))*"', r'"I do not know what \"A\" is"').group(0)
'"I do not know what \\"'
>>> re.match(r'"((\\\")|[^"])*"', r'"I do not know what \"A\" is"').group(0)
'"I do not know what \\"A\\" is"'

这两个正则表达式旨在查找带转义引号序列的带引号的字符串。除非我遗漏了什么,否则区别在于括号中的析取顺序。

为什么它们不都接受整个字符串?

最佳答案

你说的是真的,顺序不同。还有一些东西是不同的。
第一个 "([^"]|(\\\"))*" 将匹配转义符,使其
匹配 "asdf\"sde"而另一个则不匹配。

此外,如果您必须处理转义引号,那么您也必须处理转义。因此,两者都无效。

这里有两种标准方法可以做到这一点。
两者都处理逃逸。
您也可以将其扩展到单引号。
如果您想跨越换行符,请使用 Dot-All 修饰符 (?s)

方法1.-交替

"(?:\\.|[^"\\]+)*"

 " 
(?:
\\ . # Escape anything
| # or,
[^"\\]+ # Not escape not quote
)*
"

方法2.-展开循环

"[^"\\]*(?:\\.[^"\\]*)*"

 " 
[^"\\]* # Optional not escape not quote
(?:
\\ . # Escape anything
[^"\\]* # Optional not escape not quote
)*
"

两者的作用相同。方法 2 比方法 1 快三到五倍。

关于python - 为什么这两个 python 正则表达式会产生不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39089760/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com