gpt4 book ai didi

python - 从 Python 中的正则表达式模式获取多个匹配项

转载 作者:行者123 更新时间:2023-12-01 06:09:49 25 4
gpt4 key购买 nike

我正在编写一个正则表达式,以类似于 shell 参数的方式解析参数,使用空格和带引号的字符串作为分隔符,以及反斜杠转义。这似乎适用于 RegexPal :

(?:(["'])(?:\\(?:\\\\)?\1|\\\\|.)*?\1|(?:\\(?:\\\\)?\s|\\\\|\S)+)

这是一个更易读的版本:

(?:(["'])(?:        # Match a double or single quote followed by
\\(?:\\\\)?\1 # an odd number of backslashes, then the same quote
|\\\\ # or two backslashes
|. # or anything else
)*?\1 # any number of times (lazily) followed by the same quote,
|(?: # OR
\\(?:\\\\)?\s # an odd number of backslashes, then whitespace
|\\\\ # or two backslashes
|\S # or any non-whitespace
)+ # any number of times.
)

我尝试使用 re.findall 将其放入 Python 中,但输出毫无意义:

>>> re.findall(
... r"(?:([\"'])(?:\\(?:\\\\)?\1|\\\\|.)*?\1|(?:\\(?:\\\\)?\s|\\\\|\S)+)",
... r'the quick brown\ fox jumps "over the" lazy\\ dog')
['', '', '', '', '"', '', '']

另一方面,RegexPal 显示了正确的结果:

[the] [quick] [brown\ fox] [jumps] ["over the"] [lazy\\] [dog]

我是否忘记以某种方式为 Python 设置模式格式?或者Python是否以某种方式不同地解释正则表达式?我不知道为什么唯一的非空匹配是双引号,并且我已经确认该模式本身按其应有的方式工作。

最佳答案

看起来一切都在非捕获组内。因此您会得到匹配项,只是没有匹配的内容。

关于python - 从 Python 中的正则表达式模式获取多个匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6473276/

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