首页 > 解决方案 > 正则表达式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)\{)+"正则表达式这样的事情,那就太好了,但是,据我所知, 那是不可能的。那我该怎么办???

标签: pythonregex

解决方案


这匹配奇数个反斜杠,后跟一个大括号:

(?<!\\)(\\\\)*(\\\{)

分解:

  • (?<!\\)- 前面没有反斜杠,以容纳下一位
    • 这被称为“消极的后视”
  • (\\\\)*- 零对或多对反斜杠
  • (\\\{)- 一个反斜杠然后一个大括号

火柴:

\{
\\\{
\\\\\{

不匹配:

\\{
\\\\{
\\\\\\{

RegExr上试试


这部分受到Vadim Baratashvili回答的启发


推荐阅读