带有对或字符的python re.sub()

时间:2011-10-10 16:27:13

标签: python regex

我正在尝试抓住一个被“!并用”!_“替换第一个”!“的字符串。

例如: str(!test!)。strip() - > STR(!_测试!)。条()

这是我到目前为止的代码:

print re.sub(r'!.*?!','!_', 'str(!test!).strip()')

使用此代码我抓得太多,结果是: STR(!_)。条()

关于如何将第一个“!”归零的任何想法。或者,有没有办法在“!!”中抓取字符串然后添加“!_”+“!”那个字符串?

3 个答案:

答案 0 :(得分:1)

print re.sub(r'!(?=.*?!)', '!_', 'str(!test!).strip()')

使用积极的前瞻。

print re.sub(r'!(.*?)!', r'!_\1!', 'str(!test!).strip()')

使用反向引用。

答案 1 :(得分:1)

从!s之间的字符中排除!:使用[^!]代替.

然后,使用()捕获要保留的RE部分,并在替换字符串中,使用\1再次插入。

print re.sub(r'!([^!]*!)', r'!_\1', 'str(!test!).strip()')

答案 2 :(得分:0)

您需要使用括号对“单词”的后半部分进行分组,并在替换字符串\g<1>中使用该组。

re.sub(r'!(.*?!)', '!_\g<1>', 'str(!test!).strip()')
相关问题