首页 > 解决方案 > 如何正确使用 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']

这种使用该方法的语法在这里正确还是我遗漏了什么?

标签: pythonreplace

解决方案


您的用法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]

推荐阅读