基本Python正则表达式:re.DOTALL*不匹配新行



我想把所有出现的A…A变成B…B,作为两个A之间的填充。必须允许填充符包含换行符。我认为re.DOTALL是解决方案。

下面是一个python脚本:

import re
tt1 = re.sub(r'A(?P<text>.*)A','Bg<text>B','AhiA')
print tt1 
tt1 = re.sub(r'A(?P<text>.*)A','Bg<text>B','AnhiA')
print tt1 
tt1 = re.sub(r'A(?P<text>[.]*)A','Bg<text>B','AnhiA')
print tt1 
tt1 = re.sub(r'A(?P<text>.*)A','Bg<text>B','AnhiA',re.DOTALL)
print tt1 

这是输出:

BhiB
A
hiA
A
hiA
A
hiA

给出了什么,我如何用"B\nhiB"替换"A\niA"?

re.sub()的第四个参数是count(要执行的最大替换操作数)。re.DOTALL就是16,所以您在一个意外的地方传递了一个(有效的)参数。

使用

re.sub(r'A(?P<text>.*)A','Bg<text>B','AnhiA', flags=re.DOTALL)

(或将re.DOTALL放在第五位):

re.sub(r'A(?P<text>.*)A','Bg<text>B','AnhiA', 0, re.DOTALL)

最新更新