我知道[]
表示可允许使用的字符集 -
>>> p = r'^[ab]$'
>>>
>>> re.search(p, '')
>>> re.search(p, 'a')
<_sre.SRE_Match object at 0x1004823d8>
>>> re.search(p, 'b')
<_sre.SRE_Match object at 0x100482370>
>>> re.search(p, 'ab')
>>> re.search(p, 'ba')
但是...今天我遇到了一个在括号内使用竖杠定义互斥模式的表达式 -
>>> q = r'^(a|b)$'
>>>
>>> re.search(q, '')
>>> re.search(q, 'a')
<_sre.SRE_Match object at 0x100498dc8>
>>> re.search(q, 'b')
<_sre.SRE_Match object at 0x100498e40>
>>> re.search(q, 'ab')
>>> re.search(q, 'ba')
这似乎模仿了上面的功能,或者我有什么遗漏吗?PS:在Python中,圆括号本身用于定义匹配文本的逻辑组。如果我使用第二种技术,那么我如何同时使用圆括号?
[ab]
和(a|b)
都完全匹配相同的内容(但第一个会更快地匹配)。正则表达式本身就是一种语言(无论你在 Python 还是 Perl 中使用它们),如果你打算有效地使用它们,就需要学习它们(晦涩)的语法。例如,在正则表达式中的括号与正则表达式外的括号不同。我建议你跟随 regular-expressions.info 上的教程。在那里花费的任何时间都将得到多次回报。 - ridgerunner