Python匹配和替换,我做错了什么?

Python匹配和替换,我做错了什么?,python,regex,Python,Regex,我有reg exp来匹配一些数据(是吗),现在我尝试用单个:字符替换所有匹配的数据 test_str = u"THERE IS MY DATA" p = re.compile(ur'[a-z]+([\n].*?<\/div>[\n ]+<div class="large-3 small-3 columns">[\n ]+)[a-z]+', re.M|re.I|re.SE) print re.sub(p, r':/1',test_str) test\u str=u“有

我有reg exp来匹配一些数据(是吗),现在我尝试用单个
字符替换所有匹配的数据

test_str = u"THERE IS MY DATA"
p = re.compile(ur'[a-z]+([\n].*?<\/div>[\n ]+<div class="large-3 small-3 columns">[\n ]+)[a-z]+', re.M|re.I|re.SE) 
print re.sub(p, r':/1',test_str) 
test\u str=u“有我的数据”
p=re.compile(ur'[a-z]+([\n].?[\n]+[\n]+)[a-z]+',re.M | re.I | re.SE)
打印回复(p,r':/1',测试)
我尝试了几种其他方法,但它不是替换任何一种,或者不仅替换匹配的模式,而是替换整个模式

1)这是反斜杠问题。
使用:
print re.sub(p,r':\1',test\u str)
not
print re.sub(p,r':/1',test\u str)

2) 将所有模式替换为
:\1
,这意味着将所有文本替换为
,后跟正则表达式中的第一个组。
要仅替换文本中的第一组,应在第一组之前和之后添加两组。 我希望这能解决问题:

test_str = u"THERE IS MY DATA" 
p = re.compile(ur'([a-z]+)([\n].*?<\/div>[\n ]+<div class="large-3 small-3 columns">[\n ]+)([a-z]+)', re.M|re.I|re.SE) 
print re.sub(p, r'\1:\2\3',test_str)
test\u str=u“有我的数据”
p=re.compile(ur'([a-z]+)([\n].?[\n]+[\n]+)([a-z]+)',re.M | re.I | re.SE)
打印参考文件(p,r'\1:\2\3',测试\U str)

什么是
/1
意思?如果需要,请将其删除。但是,在处理HTML时,使用HTML解析器会更安全。另外请注意,regex101有一个替换部分,可以让您很容易地发现错误。请查看下面的内容和答案,有很好的理由说明您不应该这样做。@WiktorStribiżew
/1
这是“第一个匹配组”的意思。我在谷歌的某个地方找到了它,当我移除它时,然后替换工作,而不是替换
()
中的一个组,而是整个模式。你想用什么样的python HTML解析器?@MastaBot:我只使用了BeautifulSoup,可以推荐它。你说得对,反正我更正了这个,它就替换了,但整个模式不仅匹配了部分
()