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

时间:2013-07-22 17:35:07

标签: regex python-2.7

我希望将所有出现的A ... A转换为B ... B,以获得两个A之间的填充。必须允许填充符包含换行符。我认为re.DOTALL是解决方案。

这是一个python脚本:

import re

tt1 = re.sub(r'A(?P<text>.*)A','B\g<text>B','AhiA')
print tt1 
tt1 = re.sub(r'A(?P<text>.*)A','B\g<text>B','A\nhiA')
print tt1 
tt1 = re.sub(r'A(?P<text>[.]*)A','B\g<text>B','A\nhiA')
print tt1 
tt1 = re.sub(r'A(?P<text>.*)A','B\g<text>B','A\nhiA',re.DOTALL)
print tt1 

这是输出:

BhiB
A
hiA
A
hiA
A
hiA

什么给出,如何用'B \ nhiB'代替'A \ nhiA'?

1 个答案:

答案 0 :(得分:7)

re.sub()的第四个参数是count(要执行的最大替换操作数)。 re.DOTALL16,因此您在意外的地方传递(有效)参数。

使用

re.sub(r'A(?P<text>.*)A','B\g<text>B','A\nhiA', flags=re.DOTALL)

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

re.sub(r'A(?P<text>.*)A','B\g<text>B','A\nhiA', 0, re.DOTALL)