Regex re.sub(python)替换匹配字符串的一部分
我有一系列字符串,它们可以通过查找子字符串“p”标记,后跟至少两个大写字母来识别 输入:Regex re.sub(python)替换匹配字符串的一部分,regex,python-2.7,Regex,Python 2.7,我有一系列字符串,它们可以通过查找子字符串“p”标记,后跟至少两个大写字母来识别 输入: <p>JIM <p>SALLY <p>ROBERT <p>Eric 吉姆萨利罗伯特埃里克 我想将“p”标记改为“I”标记,如果后面跟着这两个大写字母(所以不是最后一个“Eric”) 期望输出: <i>JIM <i>SALLY <i>ROBERT <p>Eric 吉姆·萨莉·罗伯特埃里克 我在Python中
<p>JIM <p>SALLY <p>ROBERT <p>Eric
吉姆萨利罗伯特埃里克
我想将“p”标记改为“I”标记,如果后面跟着这两个大写字母(所以不是最后一个“Eric”)
期望输出:
<i>JIM <i>SALLY <i>ROBERT <p>Eric
吉姆·萨莉·罗伯特埃里克
我在Python中使用正则表达式尝试过这一点:
import re
Mytext = "<p>JIM <p>SALLY <p>ROBERT <p>Eric"
changeTags = re.sub('<p>[A-Z]{2}', '<i>' + re.search('<p>[A-Z]{2}', Mytext).group()[-2:], Mytext)
print changeTags
重新导入
Mytext=“JIMSALLYROBERTEric”
changeTags=re.sub('[A-Z]{2}',''+re.search('[A-Z]{2}',Mytext).group()[-2:],Mytext)
打印更改标签
但是输出在每个实例中都使用“i”标记+JI,而不是在条目2和条目3中交互使用SA和RO
<i>JIM <i>JILLY <i>JIBERT <p>Eric
JIM JILLY JIBERTEric
我认为问题在于我没有正确理解.group()方法。谁能告诉我我做错了什么
谢谢。您的内部
re.search
只计算一次,结果作为参数之一传递给re.sub
。这不可能捕获所有的大写字母对,只有第一个。这意味着您的方法无法奏效,而不仅仅是您对组的理解
此外,不需要使用组
您需要使用括号捕获大写字母,并在替换表达式中将其引用为\1
:
re.sub('<p>([A-Z]{2})', r'<i>\1', Mytext)
re.sub('([A-Z]{2}'),r'\1',Mytext)
\1
这里的意思是:替换为正则表达式中第一个(…)
匹配的子字符串。()
注意替换字符串前面的前导r
,使其成为原始字符串。使用前瞻断言的另一种方法:
re.sub(r'<p>(?=[A-Z]{2,})','<i>',MyText)
re.sub(r'(?=[A-Z]{2,}'),,MyText)