python - 如果列表中的子字符串//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) 是解决方案。但没关系,这个问题已经被阻止了,坚持那里有解决方案。
解决方案
使用正则表达式。
import re
txt = re.sub(r'[,:;] ', r'\g<0><<', txt)
\g<0>
替换中的替换为与模式匹配的任何内容。
推荐阅读
- amazon-web-services - 如何打印/调试数据源资源的所有可用字段?
- jmeter - 从 Jmeter 关联记录器记录中排除某些 URL
- c++ - C++ 重生函数
- amazon-web-services - ElasticBeanstalk 在使用 Terraform 的共享 ALB 中使用 HTTPS:443 而不是 HTTP:80 创建默认侦听器规则
- r - 使用修改后的列名绘制图形的 R 函数
- node.js - 关于 Web 应用程序的安全性,我应该注意什么?
- asp.net - Visual Studio 2019 中多个帐户的 DefaultAzureCredential 异常
- php - 使用 PHP / AJAX 中的 mysql 数据库中的数据填充 Bootstrap Accordion
- mongodb - 尝试将 mongodb 与我的应用程序连接时出现错误
- r - 在 R 中对高于和低于特定阈值的值进行分组