-1

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

PS 请注意,我正在使用的字符中没有重复字母。

4

5 回答 5

3

如果要替换所有出现的后面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适合此条件的每个,而不仅仅是第一个。

于 2012-04-18T17:51:22.480 回答
2
>>> import re
>>> re.sub(r'e(.*t)', r'i\1', "forest")
'forist'
>>> re.sub(r'e(.*t)', r'i\1', "jungle")
'jungle'
于 2012-04-18T17:42:59.250 回答
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))
于 2012-04-18T17:51:11.260 回答
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''
于 2012-04-18T18:03:20.597 回答
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'
于 2012-04-18T20:27:30.530 回答