为什么我的正则表达式有奇怪的行为?这是虫子吗?

2024-07-04 05:35:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我的正则表达式有些问题。我想在注释之前检索字符串。此字符串可以用引号括起来,也可以不用引号括起来。你知道吗

如果我把#(注释)放在引号中,我希望它是字符串而不是注释。你知道吗

下面是我的正则表达式:

[\"']?(.*?)[\"']?\s*(#.*)

下面是此正则表达式的一些函数示例:

"test" # comment    ---> group1: test   group2: # comment
test # comment      ---> group1: test   group2: # comment

以下是我遇到的问题,我不明白:

"t#est" # comment   ---> group1: t      group2: #est" # comment

我想要group1: t#estgroup2: # comment

My regex with Regex1O1

事先谢谢你的帮助。你知道吗


Tags: 函数字符串test示例mywithcomment引号
2条回答

你让开始/结束引号可选,但不一致。他们要么都在,要么都不在。它们应该匹配,"a'不是正确的字符串。你知道吗

用引号括起来的字符串是\"[^\"]*\"|'[^']*'。注释前面没有引号的字符串是[^#]*。你知道吗

这使得我们的总正则表达式:

(\"[^\"]*\"|'[^']*'|[^#]*)\s*#(.*)

您应该捕获初始引号(如果有的话),然后稍后使用backreference来确保如果匹配了第一个'",那么在匹配的末尾#之前需要'"

([\"']?)(.*?)\1\s*(#.*)

https://regex101.com/r/Rpb5wL/1

(请注意,由于现在捕获了初始引号,因此您必须更改使用结果组的代码来说明这一点—例如,#部分现在将位于第3组,而不是第2组)

相关问题 更多 >

    热门问题