我的代码中有一个字符串(完全由小写字母组成)。在我打算在同一个字符串中替换的字符之后,我需要替换另一个字符的外观条件。例如,如果要替换的字符是“e”而条件字符是“t”,那么我们将替换“森林”中的“e”而不是“丛林”中的“e” 有没有办法在Python中以简单的方式执行此操作?感谢您抽出时间解决这个问题。
请注意,我正在处理的角色中没有重复的字母。
答案 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'