1

所以我有这个字符串:

sockcooker!~shaz@Rizon-AC7BDF2F.dynamic.dsl.as9105.com !~shaz@ PRIVMSG #Rizon :ohai. New here. registered 10 mins ago, have not got an email. Addy is correct. My email is working fine.

我希望正则表达式找到 !~shaz@ 所以我使用这个 r"!.+@" 但后来它找到了这个

!~shaz@Rizon-AC7BDF2F.dynamic.dsl.as9105.com !~shaz@ 

我记得。我希望它找到它们作为单独的字母并用某个字母替换它们。如果你能给我任何好的 Python 正则表达式 tuts 对这个有任何帮助,我将不胜感激:D

4

2 回答 2

4

默认情况下,量词本质上是贪婪的,它们会尽可能多地匹配。这就是为什么你的正则表达式匹配到最后一个@

您可以使用不情愿的量词(在?之后添加一个+)在第一个停止@

r"!.+?@"

或者你也可以使用negated字符类,它会在第一个自动停止@

r"![^@]+"

选择任何对你来说更容易理解的东西。

于 2013-02-16T20:32:42.787 回答
1

您想使用不贪婪的匹配。有两种方法(python 都支持)。后者更灵活:

r"![^@]+"
r"!.+?@

?使得不.+贪心,所以它会停在第一个“@”而不是最后一个。

于 2013-02-16T20:32:57.867 回答