想知道从"test.this"匹配"blah blah blah test.this@gmail.com blah blah"的最佳方法是什么吗?使用Python。

我已经尝试过re.split(r"\b\w.\w@")

评论

\ w只匹配一个字符-您可能需要\ w +

如果您正在寻找一个电子邮件验证正则表达式。

#1 楼

正则表达式中的.是元字符,用于匹配任何字符。要匹配文字点,您需要对其进行转义,因此\.

#2 楼

在您的正则表达式中,您需要转义点"\."或在字符类"[.]"中使用它,因为它是正则表达式中的元字符,可以匹配任何字符。

此外,您需要\w+而不是\w来匹配一个或多个单词字符。你需要。 test.this会在split周围拆分您的字符串。例如:

>>> re.split(r"\b\w+\.\w+@", s)
['blah blah blah ', 'gmail.com blah blah']



您可以使用split

>>> re.findall(r'\w+[.]\w+(?=@)', s)   # look ahead
['test.this']
>>> re.findall(r'(\w+[.]\w+)@', s)     # capture group
['test.this']


评论


+1代表角色类别。从Jenkinsfile使用gcovr并尝试排除点目录,Jenkins无法理解转义序列。角色班的工作很漂亮。

–乔纳森·兰德鲁姆
18年6月1日在20:09

#3 楼


“在默认模式下,点(。)匹配换行符以外的任何字符。如果指定了DOTALL标志,则匹配包括换行符的任何字符。” (python Doc)


因此,如果要评估点文字,我认为应该将其放在方括号中:

>>> p = re.compile(r'\b(\w+[.]\w+)')
>>> resp = p.search("blah blah blah test.this@gmail.com blah blah")
>>> resp.group()
'test.this'


#4 楼

要转义字符串变量(包括点)的非字母数字字符,可以使用re.escape
import re

expression = 'whatever.v1.dfc'
escaped_expression = re.escape(expression)
print(escaped_expression)

输出:

whatever\.v1\.dfc

可以使用转义的表达式可从字面上查找/匹配字符串。

#5 楼

在javascript中,您必须使用\。匹配一个点。

评论


它要求python而不是JS

– pl-jay
9月10日9:44

#6 楼

对于某些特定类型的输入字符串,此表达式

(?<=\s|^)[^.\s]+\.[^.\s]+(?=@)


也可以正常工作。

import re

expression = r'(?<=^|\s)[^.\s]+\.[^.\s]+(?=@)'
string = '''
blah blah blah test.this@gmail.com blah blah
blah blah blah test.this @gmail.com blah blah
blah blah blah test.this.this@gmail.com blah blah
'''

matches = re.findall(expression, string)

print(matches)


输出

['test.this']



如果要简化/修改/探索表达式,已在regex101.com的右上方面板中进行了说明。如果您愿意,还可以在此链接中查看它如何与某些示例输入匹配。