我试图使用以下脚本将所有匹配的事件替换为标题大小写。当筛选词之间有换行符时(在本例中是'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)
发布于 2018-09-06 00:06:03
下面的代码给出了您期望的结果:
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“的值总是在双引号之间,并且它不能包含双引号(以某种方式转义)。不过,用稍微复杂的正则表达式来处理转义是可能的。
发布于 2018-09-05 22:22:54
使用re.DOTALL
标志:
formatted = re.sub(rex, maketitle, string, flags=re.DOTALL)
print(formatted)
根据文档
re.DOTALL
做“.”特殊字符匹配任何字符,包括换行符;没有此标志,“。将匹配除了换行符以外的任何东西。
https://stackoverflow.com/questions/52197413
复制