正则表达式匹配点

76 python regex

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

我试过了 "test.this"

谢谢!

Yuu*_*shi 120

一个.在正则表达式是一个元字符,它是用来匹配任何字符.要匹配文字点,您需要将其转义,所以\.

  • 除非正则表达式存储在常规 python 字符串中,在这种情况下,您需要使用双“\”(“\\”)。因此,所有这些都是等效的:`'\\.'`、`"\\."`、`r'\.'`、`r"\."`。请参阅:/sf/answers/3663518001/。 (3认同)

Roh*_*ain 32

"\."你需要在你的"[.]"内部逃避或使用它\w+,因为它是正则表达式中的元字符,它匹配任何字符.

此外,您需要\w而不是test.this匹配一个或多个单词.


现在,如果你想要split内容,那就split不是你需要的了.test.this将你的字符串分开re.findall.例如: -

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

你可以使用"\.": -

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

  • +1 字符类。使用 Jenkinsfile 中的 gcovr 并尝试排除点目录,Jenkins 不理解转义序列。字符类工作得很好。 (2认同)

Sta*_*ser 12

"在默认模式下,Dot(.)匹配除换行符之外的任何字符.如果指定了DOTALL标志,则匹配包括换行符在内的任何字符." (python Doc)

所以,如果你想评估dot literaly,我认为你应该把它放在方括号中:

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