我正在尝试抓住一个被“!并用”!_“替换第一个”!“的字符串。
例如: str(!test!)。strip() - > STR(!_测试!)。条()
这是我到目前为止的代码:
print re.sub(r'!.*?!','!_', 'str(!test!).strip()')
使用此代码我抓得太多,结果是: STR(!_)。条()
关于如何将第一个“!”归零的任何想法。或者,有没有办法在“!!”中抓取字符串然后添加“!_”+“!”那个字符串?
答案 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()')