gpt4 book ai didi

python - 在正则表达式中捕获组的奇怪行为

转载 作者:行者123 更新时间:2023-12-04 19:01:57 25 4
gpt4 key购买 nike

给定以下简单的正则表达式,其目标是捕获引号字符之间的文本:

regexp = '"?(.+)"?'

当输入类似于:
"text"

捕获组 (1) 具有以下内容:
text"

我希望组(1)有 text只有(没有引号)。有人可以解释发生了什么以及为什么正则表达式捕获 "符号,即使它在捕获组 #1 之外。另一个我不明白的奇怪行为是为什么第二个引号字符被捕获而不是第一个,因为它们都是可选的。最后我使用以下正则表达式修复了它,但我想了解我做错了什么:
regexp = '"?([^"]+)"?'

最佳答案

Quantifiers in regular expressions are greedy :他们尝试匹配尽可能多的文本。因为你的最后 "是可选的(您在正则表达式中写了 "?),.+将匹配它。

使用 [^"]是一种可接受的解决方案。缺点是你的字符串不能包含 "字符(可能需要也可能不需要,取决于具体情况)。

另一个是使"必需的:

regexp = '"(.+)"'

另一种是制作 +非贪婪,通过使用 +? .但是,您还需要添加 anchor ^$ (或类似,取决于上下文),否则它将只匹配第一个字符( t"test" 的情况下):
regexp = '^"?(.+?)"?$'

这个正则表达式允许 "字符位于字符串的中间,以便 "t"e"s"t"将导致 t"e"s"t被该团伙抓获。

关于python - 在正则表达式中捕获组的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35509257/

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