忽略正则表达式匹配中的换行符

Lay*_*ray 6 python regex

我正在尝试使用以下脚本用标题案例替换所有匹配的事件。当过滤词(在本例中为“ABC”和“DEF”)之间有换行符时,该行不会按预期替换。

在这种情况下如何忽略换行符?

编辑:我不想从字符串中完全去除所有换行符,而只想去除过滤器单词之间的换行符。

Edit2:我编辑了文本和脚本以更好地反映我遇到的问题。如果我包含flags=re.DOTALL参数,它会给我:

  mmm    = "Hello Hello Hello Hello Hello Hello
              Hello Hello Hello Hello",
  Bbb   = "Bbb",
Run Code Online (Sandbox Code Playgroud)

而我想要的输出是(注意bbb不是大写):

  mmm    = "Hello Hello Hello Hello Hello Hello
              Hello Hello Hello Hello",
  bbb   = "bbb",
Run Code Online (Sandbox Code Playgroud)

以下是我正在使用的脚本。

test_string = '''
  mmm    = "hello hello hello hello hello hello
              hello hello hello hello",
  bbb   = "bbb",
'''

rex = r'(?<= mmm)(.*)(?=\")'

def maketitle(match_obj):
    return match_obj.group(0).title()

formatted = re.sub(rex, maketitle, test_string, flags=re.DOTALL)

print(formatted)
Run Code Online (Sandbox Code Playgroud)

Mik*_*eyn 13

使用re.DOTALL标志:

formatted = re.sub(rex, maketitle, string, flags=re.DOTALL)
print(formatted)
Run Code Online (Sandbox Code Playgroud)

根据文档

re.DOTALL
制作'.' 特殊字符完全匹配任何字符,包括换行符;没有这个标志,'.' 将匹配除换行符以外的任何内容。


Pie*_*ine 2

以下代码给出了您期望的结果:

test_string = '''
  mmm    = "hello hello hello hello hello hello
              hello hello hello hello",
  bbb   = "bbb",
'''

rex = r'(?<= mmm)\s*=\s*"[^"]*'

def maketitle(match_obj):
    return match_obj.group(0).title()

formatted = re.sub(rex, maketitle, test_string)

print(formatted)
Run Code Online (Sandbox Code Playgroud)

我假设您想要“标题大小写”的值始终位于双引号之间,并且它不能包含双引号(以某种方式转义)。不过,使用稍微复杂的正则表达式可以处理转义。