我的代码中有一个字符串(完全由小写字母组成)。在我打算在同一字符串中替换的字符之后,我需要替换一个以另一个字符的出现为条件的字符。例如,如果要替换的字符是“e”,条件字符是“t”,那么我们将替换“森林”中的“e”而不是“丛林”中的“有没有办法以简单的方式做到这一点Python?感谢您抽出时间来解决这个问题。
PS 请注意,我正在使用的字符中没有重复字母。
如果要替换所有出现的后面e
有 a 的t
,可以使用以下命令:
>>> 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'
这使用了前瞻,这是一个零宽度的断言,它检查是否t
在字符串中的任何后面而不消耗任何字符。这允许正则表达式找到e
适合此条件的每个,而不仅仅是第一个。
>>> import re
>>> re.sub(r'e(.*t)', r'i\1', "forest")
'forist'
>>> re.sub(r'e(.*t)', r'i\1', "jungle")
'jungle'
有什么问题?
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))
如果最后一个 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''
以下是一个应该做你想做的功能:
>>> 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'