让我们说,给定的字符串是:来自stephen.marquard@uct.ac.za星期六09年1月5日14:16 2008年
据我所知,答案应该是: d@uct.ac.za,因为非空格字符的数量应该懒惰,贪婪(尽可能少),因此。但是python说: stephen.marquard@uct.ac.za
import re
hand = open('textfile.txt')
for line in hand:
line=line.rstrip()
x=re.findall('\S+@\S+',lin)
if x:
print xtextfile.txt是:
From stephen.marquard@uct.ac.za Sat Jan 5 09:14:16 2008发布于 2017-05-20 13:00:03
当你说:
因此,非空格字符的数量应该懒惰、贪婪(尽可能少)。
在您的例子中,它意味着它应该是1或零。
因此,使用非空白字符optional使用?量词就可以完成这项工作。
尝试使用\S?@\S+
发布于 2017-05-20 12:57:30
如果您只想在@之前只需要一个字符,您可以使用:
'\S@\S+'非贪婪并不意味着正则表达式将试图通过改变开始索引来找到最短的子字符串。这意味着,如果有一个从索引0开始并与正则表达式匹配的子字符串,引擎将尽快停止。
发布于 2020-05-07 17:55:49
我想我有答案了。这一趋势有点晚了,但现在开始了。
让我们先参考埃里克的声明:不贪婪.这意味着,如果有一个从索引0开始并与正则表达式匹配的子字符串,引擎将尽快停止。
好了伙计们。引擎在索引0处启动。它读着stephen.marquard,它还没有到达@所以它还在继续,但是还没有任何东西认为它的选择是错误的,所以它把它保存在记忆中。
它到达了@标志。太棒了。\S+?不会在“之前影响”,但会在“之后影响”,因为引擎从左到右读取。当它到达@uct中的u时,它已经满足了要求,所以它就停在那里。虽然通过stephen.marquard@阅读,它仍然没有。
https://stackoverflow.com/questions/44086019
复制相似问题