2011-01-21 70 views
1

正則表達式中的字符集使用[]指定。字符集匹配任何一個附加字符。例如,[abc]將匹配'a','b'或'c'中的一個。Python中的字符集與re2c正則表達式之間的區別

我意識到Pythonre2c正則表達式中字符集之間存在潛在的差異。我知道什麼是在兩個相同的:

  • 雙方接受的範圍,例如[AZ]小寫字母匹配
  • 無論使用[^ ...]符號
  • 雙方共同接受的字母數字接受反套和其他一些字符(空格等)

但我很擔心,這些可能是不同的:

  • CHARACT需要的字符內進行轉義ERS設置
  • 在哪裏放置文字「 - 」或「^」設置,如果我想匹配的字符,而不是指定設定反向或範圍內的字符內

你能解釋Python和re2c字符集之間的區別嗎?

+0

從來沒有聽說過或使用過re2c,但實例看起來就像你的平均PCRE - 和Python`re`也是PCRE一樣,所以不應該有顯着的差異(像lookaround這樣的更高級特性中的最微妙的語義差異)。 – delnan 2011-01-21 16:46:04

+1

re2c是PCRE/Python的精簡版。它使用DFA來一次檢查多個普通表達式的匹配。總之,如果我有'm'個長度爲O(n)個字符的正則表達式,那麼re2c決定哪個匹配O(n),而不是O(m * n),PCRE和Python最多可以做什麼。 re2c的權力較小,所以字符少意味着特殊暗示字符集可能不同。 – 2011-01-21 18:39:42

回答

1

看看您提供的re2c手動鏈接,看起來re2c使用相同的語法,只是該語法的一個子集。

爲了解決您的具體問題對正則表達式的語法

人物需要的字符集內進行轉義。

你指的是什麼字符?

在哪裏放置文字-^字符集裏面......

對於^,任何地方,但一開始應該做的,併爲-,任何地方,但在中間應該做的。

>>> import re 
>>> match_literal_hyphen = "[ab-]" 
>>> re.findall(match_literal_hyphen, "abc - def") 
['a', 'b', '-'] 
>>> match_literal_caret = "[a^b]" 
>>> re.findall(match_literal_caret, "abc^def") 
['a', 'b', '^'] 
+0

我指的是字符。$ * +?{}()在Python中有特殊含義,我假設反斜槓和[]需要轉義,即我會使用[\\ [\\] \\ \]匹配任何'[',']','\' – 2011-01-21 18:29:20

0

我會逃避任何導致混亂 -

/[][]/匹配 ']' 或 '['
/[[]]/匹配 '[]'
/[]]]/匹配 ']'
/[[[]/匹配「[ '
/[]/是一個不匹配的'['錯誤

相關問題