如何让Regex分别选择单词

时间:2013-02-16 20:31:38

标签: python regex

所以我有这个字符串:

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正则表达式,我会很感激:D

2 个答案:

答案 0 :(得分:4)

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

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

r"!.+?@"

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

r"![^@]+"

选择更容易理解的内容。

答案 1 :(得分:1)

你想要使用不合适的比赛。有两种方式(和python都支持)。后者更灵活:

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

?使.+无效,因此它会停在第一个“@”而不是最后一个。