Python中的字符集与re2c正则表达式之间的区别

问题描述:

正则表达式中的字符集使用[]指定。字符集匹配任何一个附加字符。例如,[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

看看您提供的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

我会逃避任何导致混乱 -

/[][]/匹配 ']' 或 '['
/[[]]/匹配 '[]'
/[]]]/匹配 ']'
/[[[]/匹配“[ '
/[]/是一个不匹配的'['错误