python - 如何正确使用 Python 中的一组字符的“替换”方法
问题描述
import re
words = ['Duration12:1', 'Noun', 'Adjective7:8']
result = ([re.sub(r'[0-9]+', r'[\g<0>]', w) for w in words])
['持续时间[12]:[1]', '名词', '形容词[7]:[8]']
但现在之后
repResult = [x.replace(':[%d]', ':%d') for x in result]
我又来了
['持续时间[12]:[1]', '名词', '形容词[7]:[8]']
虽然我希望替换应该是的字符
['持续时间[12]:1', '名词', '形容词[7]:8']
这种使用该方法的语法在这里正确还是我遗漏了什么?
解决方案
您的用法replace
是错误的,因为您正在搜索字符串文字“%d”。这不是正则表达式。
您可以像这样修复您的代码:
import re
words = ['Duration12:14254', 'Noun', 'Adjective7:888']
result = [re.sub(r'[0-9]+', r'[\g<0>]', w) for w in words]
repResult = [re.sub(r':\[(\d+)\]', r':\1', w) for w in result]
print(repResult)
你得到:
['Duration[12]:1', 'Noun', 'Adjective[7]:8']
随着['Duration12:14254', 'Noun', 'Adjective7:888']
,你得到:
['Duration[12]:14254', 'Noun', 'Adjective[7]:888']
可以使用单个 RegEx 简化此代码:
import re
words = ['Duration12:14254', 'Noun', 'Adjective7:888']
result = [re.sub(r'(\d+):(\d+)', r'[\1]:\2', w) for w in words]
推荐阅读
- vaadin - vaadin router litElement 项目中的更改页面
- iis - 如何在具有 SSR 优势的 IIS 上部署下一个 js 应用程序?
- elasticsearch - 用于查询 DSL 的 Elasticsearch Rest 客户端
- python - opencv-python 和 opencv-contrib-python 的区别
- typescript - 从枚举的 const 创建联合类型
- go - 如何检查响应标头是否包含某个字符串
- r - 如何对R中两个不相等向量的值求和?
- javascript - 带有服务器端处理的 Shiny App 中的 JS 回调
- r - R 新手,在我的函数中收到错误
- c# - 如何将选定的索引从列表框显示到文本框