Py学习  »  Python

如何在Python中对一组字符正确使用“Replace”方法

Nam • 6 年前 • 1990 次点击  
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']

这里使用这个方法的语法正确吗?还是我遗漏了什么?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/50647
文章 [ 1 ]  |  最新文章 6 年前
Laurent LAPORTE
Reply   •   1 楼
Laurent LAPORTE    7 年前

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