首页 > 解决方案 > 如果列表中的子字符串//pythonic方式,python替换字符串中的子字符串

问题描述

如果这样的子字符串属于列表,我必须替换字符串中的子字符串

txt = 'lorem ipsum; lorem ipsum. lorem ipsum: loren lorem'
list_punctuation = [', ',': ','; ']
for punct in list_punctuation:
    txt = txt.replace(punct,punct + '<<')

这就是典型的方式。我遍历列表的元素并进行替换,其中包括在标点符号后包含一个符号“<<”。

问题是是否有更蟒蛇的方式来做到这一点。我不喜欢那个循环,除了丑陋之外,它可能非常慢。

任何想法?

编辑1

正则表达式有效。但是我仍然认为有一个没有使用外部库的pythonic one liner(即使 re 是标准的一部分)。为什么我要参考非正则表达式解决方案?因为列表将单独构建,并且会随着时间而变化。更改列表比更改正则表达式更容易。我现在不知道该列表将包含什么内容。标点符号列表就是一个简短的例子。

EDIT2 答案中建议了两个链接。

a) 第一个是关于有条件的替换。这里没有条件,只是列表的元素。在此链接中,提供了多线解决方案。我的问题是关于找到一个班轮。这个问题的目的是找到一个更简洁的解决方案。

如何替换字符串的多个子字符串?

b) 这个问题是关于替换字符的,没有提到包含要替换的元素的列表。在 b) 中,多行编码不是问题,而这正是问题所在。 替换字符串中多个字符的最佳方法?

NOR a) 或 b) 是解决方案。但没关系,这个问题已经被阻止了,坚持那里有解决方案。

标签: pythonstringreplace

解决方案


使用正则表达式。

import re
txt = re.sub(r'[,:;] ', r'\g<0><<', txt)

\g<0>替换中的替换为与模式匹配的任何内容。


推荐阅读