"test.this"
匹配"blah blah blah test.this@gmail.com blah blah"
的最佳方法是什么吗?使用Python。我已经尝试过
re.split(r"\b\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的右上方面板中进行了说明。如果您愿意,还可以在此链接中查看它如何与某些示例输入匹配。
评论
\ w只匹配一个字符-您可能需要\ w +如果您正在寻找一个电子邮件验证正则表达式。