想知道最好的方法是什么,以匹配"test.this"
从"blah blah blah test.this@gmail.com blah blah"
IS?使用Python。
我试过了 re.split(r"\b\w.\w@")
想知道最好的方法是什么,以匹配"test.this"
从"blah blah blah test.this@gmail.com blah blah"
IS?使用Python。
我试过了 re.split(r"\b\w.\w@")
Answers:
在正则表达式中,您需要转义点"\."
或在字符类中 使用它"[.]"
,因为它是正则表达式中的元字符,可以匹配任何字符。
另外,你需要\w+
,而不是\w
匹配一个或多个单词字符。
现在,如果您需要test.this
内容,则split
不是您所需要的。split
会将您的字符串拆分到周围test.this
。例如:
>>> re.split(r"\b\w+\.\w+@", s)
['blah blah blah ', 'gmail.com blah blah']
您可以使用re.findall
:
>>> re.findall(r'\w+[.]\w+(?=@)', s) # look ahead
['test.this']
>>> re.findall(r'(\w+[.]\w+)@', s) # capture group
['test.this']
要转义字符串变量(包括点)的非字母数字字符,可以使用re.escape
:
import re
expression = 'whatever.v1.dfc'
escaped_expression = re.escape(expression)
print(escaped_expression)
输出:
whatever\.v1\.dfc
您可以使用转义的表达式从字面上查找/匹配字符串。
这个表达,
(?<=\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+