使用列表中的元素替换回复sub?

2024-10-02 22:28:48 发布

您现在位置:Python中文网/ 问答频道 /正文

对于给定列表的re.sub执行替换的最佳方法是什么?例如:

import re

some_text = 'xxxxxxx@yyyyyyyyy@zzzzzzzzz@'
substitutions = ['ONE', 'TWO', 'THREE']
x = re.sub('@', lambda i: i[0] substitutions.pop(0), some_text) # this doesn't actually work

预期输出为:

^{pr2}$

Tags: 方法lambdatextimportre列表somepop
3条回答

您的lambda中有一个语法错误:

>>> substitutions = ['ONE', 'TWO', 'THREE']
>>> re.sub('@', lambda _: substitutions.pop(0), some_text)
'xxxxxxxONEyyyyyyyyyTWOzzzzzzzzzTHREE'

如果不想修改列表,可以将其包装为iterable。在

^{pr2}$

代码几乎是正确的,需要稍微更正语法错误:

import re

some_text = 'xxxxxxx@yyyyyyyyy@zzzzzzzzz@'
substitutions = ['ONE', 'TWO', 'THREE']
x = re.sub('@', lambda i: substitutions.pop(0), some_text) # the error was in the lambda function

一种方法(可能还有一种更好的方法,我不太了解Python)是编译正则表达式,然后使用sub代替:

import re

some_text = 'xxxxxxx@yyyyyyyyy@zzzzzzzzz@'
substitutions = ['ONE', 'TWO', 'THREE']
pattern = re.compile('@')
x = pattern.sub(lambda i: substitutions.pop(0), some_text)

Here's a demo.

相关问题 更多 >