替换字符串中的字符取决于字符串Python中另一个字符的外观

时间:2012-04-18 17:40:19

标签: python string

我的代码中有一个字符串(完全由小写字母组成)。在我打算在同一个字符串中替换的字符之后,我需要替换另一个字符的外观条件。例如,如果要替换的字符是“e”而条件字符是“t”,那么我们将替换“森林”中的“e”而不是“丛林”中的“e” 有没有办法在Python中以简单的方式执行此操作?感谢您抽出时间解决这个问题。

请注意,我正在处理的角色中没有重复的字母。

5 个答案:

答案 0 :(得分:3)

如果您想要替换所有e后面出现t的{​​{1}},您可以使用以下内容:

>>> import re
>>> re.sub(r'e(?=.*t)', 'i', 'forest')
'forist'
>>> re.sub(r'e(?=.*t)', 'i', 'jungle')
'jungle'
>>> re.sub(r'e(?=.*t)', 'i', 'greet')
'griit'

这使用lookahead,这是一个零宽度断言,用于检查字符串后面的任何位置是否t,而不消耗任何字符。这允许正则表达式找到符合这个条件的每个e,而不仅仅是第一个条件。

答案 1 :(得分:2)

>>> import re
>>> re.sub(r'e(.*t)', r'i\1', "forest")
'forist'
>>> re.sub(r'e(.*t)', r'i\1', "jungle")
'jungle'

答案 2 :(得分:1)

有什么问题?

if st.find("e") < st.find("t"): 
    st.replace("e","i",1)

及其可读性

如果事件不是唯一的,您也可以

>>> pos_t=st.find("t")
>>> "".join(e if (e != 'e' or i > pos_t) else 'i' for i,e in enumerate(st))

答案 3 :(得分:0)

如果在最后一个t之前出现的部分,这将用'i'代替所有'e':

def sub(x):   
    return x[:x.rfind('t')].replace('e','t') + x[x.rfind('t'):]

结果:

>>> sub('feeoeresterette')
'fttotrtsttrttte'
>>> sub('forest')
'fortst'
>>> sub('greet')
'grttt'
>>> sub('theater')
'thtater''

答案 4 :(得分:0)

以下是一个应该做你想做的事情:

>>> def replace(source, replacee, replacement, conditional):
...     if source.find(replacee) < source.rfind(conditional):
...         return source.replace(replacee, replacement)
...     else:
...         return source

或者,如果你想减少冗长:

>>> def replace(source, replacee, replacement, conditional):
...     return source.find(replacee) < source.rfind(conditional) and source.replace(replacee, replacement) or source

两个产量都应该产生相同的结果,这里有一些例子:

>>> replace('forest', 'e', 'i', 't')
'forist'
>>> replace('jungle', 'e', 'i', 't')
'jungle'
>>> replace('tales', 'e', 'i', 't')
'tales'