想知道从“blah blah blah test.this@gmail.com blah blah”匹配“test.this”的最佳方法是什么?使用Python。
我试过了re.split(r"\b\w.\w@")
谢谢!
答案 0 :(得分:104)
正则表达式中的.
是元字符,用于匹配任何字符。要匹配文字点,您需要将其转义,\.
答案 1 :(得分:26)
在regex
中,您需要转义dot(.) - "\."
或在character class - "[.]"
内使用它,因为它是正则表达式中的元字符,可与任何字符匹配。
此外,您需要\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']
答案 2 :(得分:10)
“在默认模式下,Dot(。)匹配除换行符之外的任何字符。如果指定了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'
答案 3 :(得分:1)
要转义字符串变量的非字母数字字符(包括点),可以使用 re.escape
:
import re
expression = 'whatever.v1.dfc'
escaped_expression = re.escape(expression)
print(escaped_expression)
输出:
whatever\.v1\.dfc
您可以使用转义的表达式从字面上查找/匹配字符串。
答案 4 :(得分:0)
在javascript中,您必须使用\。匹配一个点。
示例
"blah.tests.zibri.org".match('test\\..*')
null
和
"blah.test.zibri.org".match('test\\..*')
["test.zibri.org", index: 5, input: "blah.test.zibri.org", groups: undefined]
答案 5 :(得分:0)
此表达式
(?<=\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的右上角进行说明。如果愿意,您还可以在this link中查看它如何与某些示例输入匹配。
答案 6 :(得分:0)
这是我对 the main answer by @Yuushi 的附加组件:
请记住,如果在常规字符串(\
或 'some string'
)而不是 {{3} 中使用,反斜杠 ("some string"
) 字符本身必须在 Python 中转义}(r'some string'
或 r"some string"
)。因此,请记住您使用的字符串类型。因此,要在常规 python 字符串中对正则表达式中的点或句点 (.
) 进行转义,您还必须使用双反斜杠 (\\
) 对反斜杠进行转义,从而使总转义序列为正则表达式中的 .
为:\\.
,如下例所示。
因此,这些是不允许的。他们会发出类似这样的警告:
<块引用>弃用警告:转义序列无效 \.
'\.' # NOT a valid escape sequence in Python
"\." # NOT a valid escape sequence in Python
所有这些都是允许的并且是等效的:
# Use a DOUBLE BACK-SLASH in Python _regular_ strings
'\\.' # Python regular string
"\\." # Python regular string
# Use a SINGLE BACK-SLASH in Python _raw_ strings
r'\.' # Python raw string
r"\." # Python raw string
如果您想在字符串中放置文字 \
,您必须使用 \\