我正在尝试使用以下脚本用标题大小写替换所有匹配的出现。当过滤词之间有换行符(在本例中为“ ABC”和“ DEF”)时,该行不会按预期替换。
在这种情况下,如何忽略换行符?
编辑:我不想从字符串中完全去除所有换行符,而只去除过滤词之间的换行符。
Edit2:我编辑了文本和脚本以更好地反映我遇到的问题。如果我包含flags=re.DOTALL
参数,它将给我:
mmm = "Hello Hello Hello Hello Hello Hello
Hello Hello Hello Hello",
Bbb = "Bbb",
我想要的输出是(请注意bbb
没有大写):
mmm = "Hello Hello Hello Hello Hello Hello
Hello Hello Hello Hello",
bbb = "bbb",
以下是我正在使用的脚本。
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)
答案 0 :(得分:3)
使用re.DOTALL
标志:
formatted = re.sub(rex, maketitle, string, flags=re.DOTALL)
print(formatted)
根据docs:
re.DOTALL
标记为“。”特殊字符完全匹配任何字符,包括换行符;没有此标志,“。”将匹配换行符以外的任何内容。
答案 1 :(得分:1)
以下代码给出了您期望的结果:
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)
我假设您要“ title-case”的值始终在双引号之间,并且它不能包含双引号(以某种方式转义)。不过,使用略微复杂的正则表达式可以处理转义。