[英]difference b/w [ab] and (a|b) in regex match?
我知道[]
表示一組允許的字符 -
>>> 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
中,括號本身用於定義匹配文本的邏輯組。 如果我使用第二種技術,那么我如何在這兩項工作中使用括號?
在這種情況下,它是相同的。
然而,交替不僅限於單個字符。 例如,
^(hello|world)$
將匹配“hello”或“world”(並且只有這兩個輸入),而
^[helloworld]$
只會匹配單個字符(“h”或“w”或“d”或諸如此類)。
快樂編碼。
[ab]
匹配一個字符(a 或 b)並且不捕獲該組。 (a|b)
捕獲 a 或 b,並匹配它。 在這種情況下,沒有太大區別,但在更復雜的情況下[]
只能包含字符和字符類,而(|)
可以在 pipe 的任一側包含任意復雜的正則表達式
在您給出的示例中,它們是可以互換的。 有一些區別值得注意:
在字符 class 方括號中,除了破折號或方括號或插入符號 ^ 之外,您不必轉義任何內容(但前提是它是第一個字符。)
括號捕獲匹配項,以便您以后可以參考它們。 字符 class 匹配不這樣做。
您可以匹配括號中的多字符串,但不能匹配字符類
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.