正则表达式匹配点


Answers:


157

一个.在正则表达式是一个元字符,它是用来匹配任何字符。要匹配文字点,您需要对其进行转义,因此\.


44

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

另外,你需要\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
+1代表角色类别。从Jenkinsfile使用gcovr并尝试排除点目录,Jenkins无法理解转义序列。角色班的工作很漂亮。
乔纳森·兰德鲁姆

13

“在默认模式下,点(。)匹配换行符以外的任何字符。如果指定了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'

0

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

import re

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

输出:

whatever\.v1\.dfc

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


-1

在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]

它要求使用python而不是JS
pl-jay

-2

这个表达,

(?<=\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的右上方面板中进行说明。如果您愿意,您还可以在此链接中观看,它如何与一些示例输入匹配。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.