簡體   English   中英

正則表達式匹配中的 b/w [ab] 和 (a|b) 差異?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM