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

Python 为什么我的正则表达式有奇怪的行为?这是虫子吗?,python,regex,Python,Regex,我的正则表达式有些问题。我想在注释之前检索字符串。此字符串可以用引号括起来,也可以不用引号括起来 如果我在引号中添加注释,我希望它是字符串而不是注释 这是我的正则表达式: [\"']?(.*?)[\"']?\s*(#.*) 以下是此正则表达式的一些函数示例: "test" # comment ---> group1: test group2: # comment test # comment ---> group1: test group2: # comme

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

如果我在引号中添加注释,我希望它是字符串而不是注释

这是我的正则表达式:

[\"']?(.*?)[\"']?\s*(#.*)
以下是此正则表达式的一些函数示例:

"test" # comment    ---> group1: test   group2: # comment
test # comment      ---> group1: test   group2: # comment
以下是我遇到的问题,我不明白:

"t#est" # comment   ---> group1: t      group2: #est" # comment
我想要group1:testgroup2:comment


提前感谢您的帮助。

您应该捕获初始报价(如果有),然后稍后使用反向引用,以确保在匹配结束时,在以下情况之前需要第一个“匹配”:


请注意,由于现在已捕获初始报价,因此您必须更改使用结果组的代码来说明这一点-例如,零件现在将位于第三组,而不是第二组

您应该捕获初始报价(如果有),然后稍后使用反向引用以确保第一个“匹配”,在比赛结束时,必须在


请注意,由于现在捕获了初始报价,因此您必须更改使用结果组来解释该问题的代码-例如,零件现在将位于第三组,而不是第二组

您将开始/结束报价设置为可选,但不一致。他们要么都在那里,要么都不在。它们应该匹配,a'不是一个合适的字符串

用引号括起来的字符串是\[^\]*\\\\\'[^']*'。注释前面没有引号的字符串是[^]*

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

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

您将开始/结束引号设置为可选,但不一致。他们要么都在那里,要么都不在。它们应该匹配,a'不是一个合适的字符串

用引号括起来的字符串是\[^\]*\\\\\'[^']*'。注释前面没有引号的字符串是[^]*

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

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

最好是链接到你真正的regex101而不是它的图像…最好是链接到你真正的regex101而不是它的图像…哇,谢谢你的快速回答!有没有办法不捕获第一个报价?您也可以在不同的可能性之间进行切换,但是捕获+反向引用看起来更好。哇,谢谢您的快速回答!有没有办法不捕获第一个报价?您也可以在不同的可能性之间进行切换,但是捕获+反向引用看起来更好