首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式的字符串类型应该是什么:'\S+?@\S+‘

正则表达式的字符串类型应该是什么:'\S+?@\S+‘
EN

Stack Overflow用户
提问于 2017-05-20 12:44:16
回答 5查看 10.6K关注 0票数 0

让我们说,给定的字符串是:来自stephen.marquard@uct.ac.za星期六09年1月5日14:16 2008年

据我所知,答案应该是: d@uct.ac.za,因为非空格字符的数量应该懒惰,贪婪(尽可能少),因此。但是python说: stephen.marquard@uct.ac.za

代码语言:javascript
复制
import re
hand = open('textfile.txt')
for line in hand:
    line=line.rstrip()
    x=re.findall('\S+@\S+',lin)
    if x:
      print x

textfile.txt是:

代码语言:javascript
复制
From stephen.marquard@uct.ac.za Sat Jan  5 09:14:16 2008
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-05-20 13:00:03

当你说:

因此,非空格字符的数量应该懒惰、贪婪(尽可能少)。

在您的例子中,它意味着它应该是1或零

因此,使用非空白字符optional使用?量词就可以完成这项工作。

尝试使用\S?@\S+

Regex101演示

票数 1
EN

Stack Overflow用户

发布于 2017-05-20 12:57:30

如果您只想在@之前只需要一个字符,您可以使用:

代码语言:javascript
复制
'\S@\S+'

非贪婪并不意味着正则表达式将试图通过改变开始索引来找到最短的子字符串。这意味着,如果有一个从索引0开始并与正则表达式匹配的子字符串,引擎将尽快停止。

票数 1
EN

Stack Overflow用户

发布于 2020-05-07 17:55:49

我想我有答案了。这一趋势有点晚了,但现在开始了。

让我们先参考埃里克的声明:不贪婪.这意味着,如果有一个从索引0开始并与正则表达式匹配的子字符串,引擎将尽快停止。

好了伙计们。引擎在索引0处启动。它读着stephen.marquard,它还没有到达@所以它还在继续,但是还没有任何东西认为它的选择是错误的,所以它把它保存在记忆中。

它到达了@标志。太棒了。\S+?不会在“之前影响”,但会在“之后影响”,因为引擎从左到右读取。当它到达@uct中的u时,它已经满足了要求,所以它就停在那里。虽然通过stephen.marquard@阅读,它仍然没有。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44086019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档