我如何编写一个正则表达式来替换一个单词,但在Python中保留它的情况?

时间:2012-06-30 16:37:21

标签: python regex

这甚至可能吗?

基本上,我想把这两个调用sub转换成一个调用:

re.sub(r'\bAword\b', 'Bword', mystring)
re.sub(r'\baword\b', 'bword', mystring)

我真正喜欢的是某种条件替换符号,如:

re.sub(r'\b([Aa])word\b', '(?1=A:B,a:b)word')

我只关心第一个角色的大写。没有其他人。

4 个答案:

答案 0 :(得分:8)

您可以使用函数来解析每个匹配项:

>>> def f(match):
        return chr(ord(match.group(0)[0]) + 1) + match.group(0)[1:]

>>> re.sub(r'\b[aA]word\b', f, 'aword Aword')
'bword Bword'

答案 1 :(得分:5)

好的,这是我提出的解决方案,感谢使用替换功能的建议。

re.sub(r'\b[Aa]word\b', lambda x: ('B' if x.group()[0].isupper() else 'b') + 'word', 'Aword  aword.')

答案 2 :(得分:4)

您可以传递一个lambda函数,该函数使用Match对象作为替换函数的参数:

import re
re.sub(r'\baword\b', 
       lambda m: m.group(0)[0].lower() == m.group(0)[0] and 'bword' or 'Bword',
       'Aword aword', 
       flags=re.I)
# returns: 'Bword bword'

答案 3 :(得分:0)

使用捕获组(r'\1'):

 re.sub(r'\b([Aa])word\b', r'\1word', "hello Aword")