[英]How to split a string on a character that occurs more than once inside the string
[英]Replace a pattern in a string once which occurs more than once
我有一个字符串:
I am Tony not charlie, Hey charlie how's you?
我想取代第二个“查理”,但不是第一个。
预期字符串:
I am Tony not charlie, Hey Tony how's you?
我正在使用以下声明来执行此操作
>>> re.sub(r',\s\w{3}\scharlie\s', ' Tony ', 'I am Tony not charlie, Hey charlie how\'s you\?')
"I am Tony not charlie Tony how's you?"
但它取代了我想要的东西。
我怎样才能让它只替换第二个“查理”而没有别的?
用自己替换第一个子字符串(及其后面的所有子字符串)并添加limit = 1以防止替换第4个,第6个等事件。
s = "I am Tony not charlie, Hey charlie how's you?"
print re.sub('(charlie.*?)charlie', r'\1Tony', s, 1)
您需要在表达式中使用分组。
看看这是不是你想要的:
>>> re.sub(r'(,\s\w*\s)charlie', r'\1Tony', r"I am Tony not charlie, Hey charlie
how's you?")
"I am Tony not charlie, Hey Tony how's you?"
对于固定模式(不是你的情况),后视/前方断言可能很方便:
re.sub(r'(?<=Hey )charlie','Tony',string
)
您可以创建自己的替换功能。 您在要替换的单词上拆分输入句子,并检查要替换发生的单词的索引:
def rreplace(s, delimiter, replacement, positions=[1]):
result = []
sentences = s.split(delimiter)
for i, sentence in enumerate(sentences):
result.append(sentence)
if not i == len(sentences)-1:
if i in positions:
result.append(replacement)
else:
result.append(delimiter)
return "".join(result)
此功能允许您选择要替换的事件。 要替换的默认索引是“1”,即第二次出现:
s = "I am Tony not charlie, Hey charlie how's you?"
delimiter = "charlie"
replacement = "Tony"
print rreplace(s, delimiter, replacement)
# I am Tony not charlie, Hey Tony how's you?
您还可以通过覆盖位置参数来选择多个替换:
s = "charlie charlie charlie"
delimiter = "charlie"
replacement = "Tony"
print rreplace(s, delimiter, replacement, [0, 2])
# Tony charlie Tony
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.