Python 匹配点的正则表达式
我想知道什么是匹配Python 匹配点的正则表达式,python,regex,Python,Regex,我想知道什么是匹配测试的最佳方法。这是中的“”诸如此类的测试。this@gmail.com废话废话“是什么?使用Python 我试过re.split(r“\b\w.\w@”)A在正则表达式中是一个元字符,用于匹配任何字符。要匹配原始Python字符串(r”“或r”“)中的文字点,您需要对其进行转义,因此r“\”在正则表达式中,您需要转义点“\。或在字符类中使用它,因为它是正则表达式中的元字符,它匹配任何字符 此外,您需要使用\w+而不是\w来匹配一个或多个单词字符 现在,如果您想要测试。这是内
测试的最佳方法。这是中的“
”诸如此类的测试。this@gmail.com废话废话“
是什么?使用Python
我试过
re.split(r“\b\w.\w@”)
A
在正则表达式中是一个元字符,用于匹配任何字符。要匹配原始Python字符串(r”“
或r”“
)中的文字点,您需要对其进行转义,因此r“\”
在正则表达式中,您需要转义点“\。
或在字符类中使用它,因为它是正则表达式中的元字符,它匹配任何字符
此外,您需要使用\w+
而不是\w
来匹配一个或多个单词字符
现在,如果您想要
测试。这是内容,那么split
不是您需要的split
将在测试周围分割字符串。此
。例如:
>>> re.split(r"\b\w+\.\w+@", s)
['blah blah blah ', 'gmail.com blah blah']
您可以使用:
“在默认模式下,点(.)匹配除换行符以外的任何字符。如果指定了点all标志,则它匹配包括换行符在内的任何字符。”(python文档)
所以,如果你想用文字来计算dot,我认为你应该把它放在方括号内:
>>> p = re.compile(r'\b(\w+[.]\w+)')
>>> resp = p.search("blah blah blah test.this@gmail.com blah blah")
>>> resp.group()
'test.this'
在javascript中,必须使用\\.
来匹配点
范例
"blah.tests.zibri.org".match('test\\..*')
null
及
这句话,
(?<=\s|^)[^.\s]+\.[^.\s]+(?=@)
如果您希望简化/修改/探索表达式,将在的右上面板中进行解释。如果您愿意,还可以在中查看它与一些示例输入的匹配情况
要对字符串变量的非字母数字字符(包括点)进行转义,可以使用re.escape
:
import re
expression = 'whatever.v1.dfc'
escaped_expression = re.escape(expression)
print(escaped_expression)
输出:
which\.v1\.dfc
您可以使用转义表达式逐字查找/匹配字符串。以下是我的附加功能:
请记住,如果在常规字符串(\
或“some string”
或“some string”
)中使用反斜杠(r'some string'
或r“some string”
)字符本身,则必须在Python中转义。因此,请记住您使用的字符串类型。因此,要在正则python字符串中转义正则表达式中的点或句点(
),还必须使用双反斜杠(\\
)转义反斜杠,使正则表达式中的
的总转义序列为:\.
,如下例所示
因此,这些是不允许的。它们会引起类似这样的警告:
弃用警告:转义序列无效。
\。
“\.”在Python中不是有效的转义序列
“\。”在Python中不是有效的转义序列
所有这些都是允许的,并且是等效的:
#在Python规则字符串中使用双反斜杠
“\\.”Python正则字符串
“\\.”Python正则字符串
#在Python原始字符串中使用一个反斜杠
r'\.\Python原始字符串
r“\.”Python原始字符串
参考资料:
\
放入字符串中,则必须使用\
\w
只匹配一个字符-您可能需要\w+
如果您正在寻找一个字符,请参见:+1以获取字符类。从Jenkins文件中使用gcovr并试图排除点目录,Jenkins不理解转义序列。character类工作得很好。它要求python而不是JS,除非正则表达式存储在正则python字符串中,在这种情况下,您需要使用double\
(\\
)。所以,所有这些都是等价的:“\\.
,”\.
,r'\.
,r'\.
。请参阅:。我继续并添加了一个答案:。@GabrielStaples次要挑剔--r“…
语法是Python的“原始”字符串,而不是“常规”字符串。@GrandOpener,正确,正如我解释的(请看一看)。请重新阅读我上面的评论。我说过,常规字符串需要双斜杠:'\\.
,“\\.”
,而原始字符串需要单斜杠:r'\.
,r'\.
,这正是我评论的重点。这个答案并不清楚。我想在我的评论中向任何使用常规字符串的人说明这一点,因为这个答案只适用于原始字符串。@GrandOpener,我已经更新了Yuushi的答案,以明确他或她的答案只适用于原始字符串。欢迎Yuushi编辑他的答案,如果他愿意的话,以显示常规字符串如何需要两个反斜杠。(我正在尽量减少对他的答案的修改。)
(?<=\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']
import re
expression = 'whatever.v1.dfc'
escaped_expression = re.escape(expression)
print(escaped_expression)