Python与re2c正则表达式中的字符集区别
在正则表达式中,字符集是用方括号 [] 来表示的。字符集可以匹配方括号内的任意一个字符。例如, [abc] 就可以匹配 'a'、'b' 或 'c' 中的任意一个。
我发现 Python 和 re2c 的字符集可能会有一些不同。不过我知道它们有一些相同之处:
- 两者都可以使用范围,比如 [a-z] 可以匹配所有的小写字母。
- 两者都可以使用 [^...] 的方式来表示反向字符集。
- 两者都可以匹配常见的字母数字字符和一些其他字符(比如空格等)。
但是我担心这些地方可能会有不同:
- 在字符集中需要转义的字符。
- 如果我想匹配 '-' 或 '^' 这个字符,而不是表示反向字符集或范围,我应该把它放在字符集的哪个位置。
你能解释一下 Python 和 re2c 的字符集之间的区别吗?
2 个回答
0
我会对任何可能引起混淆的东西进行处理 -
/[][]/
可以匹配到 ']' 或 '['
/[[]]/
可以匹配到 '[]'
/[]]]/
可以匹配到 ']]'
/[[[]/
可以匹配到 '['
/[]/
是一个未匹配的 '[' 错误
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', '^']