python - 正则表达式python中的表达式
问题描述
我想制作一个正则表达式来格式化文本,其中不能有{
字符,除非它\
后面带有反斜杠。问题是反斜杠可以自行转义,所以我不想匹配\\{
例如,但我确实想要\\\{
. 所以我只想要一个奇数的反斜杠{
。我不能只把它放在一个组中,然后像这样查找反斜杠的数量:
s = r"a wei\\\{rd thing\\\\\{"
matchs = re.finditer(r"([^\{]|(\\+)\{)+", s)
for match in matchs:
if len(match.group(2)) / 2 == len(match.group(2)) // 2: # check if it's even
continue
do_some_things()
因为组 2 可以多次使用,所以我只能访问最后一个(在这种情况下,\\\\\
)如果我们可以做一些像"([^\{]|(\\+)(?if len(\2) / 2 == len(\2) // 2)\{)+"
正则表达式这样的事情,那就太好了,但是,据我所知, 那是不可能的。那我该怎么办???
解决方案
这匹配奇数个反斜杠,后跟一个大括号:
(?<!\\)(\\\\)*(\\\{)
分解:
(?<!\\)
- 前面没有反斜杠,以容纳下一位- 这被称为“消极的后视”
(\\\\)*
- 零对或多对反斜杠(\\\{)
- 一个反斜杠然后一个大括号
火柴:
\{
\\\{
\\\\\{
不匹配:
\\{
\\\\{
\\\\\\{
这部分受到Vadim Baratashvili的回答的启发