在Python中使用列表推导进行正则替换

4 投票
1 回答
3626 浏览
提问于 2025-04-18 16:33

有没有人知道怎么在Python中用列表推导式来使用re.sub?

我现在用的是这个:

>>> a = ["N","!","1","abc"]
>>> [(re.sub(r'(h|N|!|N|1)', r"'\033[91m'\g<1>'\033[0m'", 'x')) for x in a]
['x', 'x', 'x', 'x']

你可以看到,我得到的列表元素只有x。

谢谢!

1 个回答

5

正如凯文所说,你没有使用变量 x,而是用了字符串字面量 'x'

>>> [(re.sub(r'(h|N|!|N|1)', r"'\033[91m'\g<1>'\033[0m'", x)) for x in a]
["'\x1b[91m'N'\x1b[0m'", "'\x1b[91m'!'\x1b[0m'", "'\x1b[91m'1'\x1b[0m'", 'abc']

更新

如果组成部分都是单个字符的字符串,正则表达式可以用字符类([....])来表示。

>>> [(re.sub(r'([hN!1])', r"'\033[91m'\g<1>'\033[0m'", x)) for x in a]
["'\x1b[91m'N'\x1b[0m'", "'\x1b[91m'!'\x1b[0m'", "'\x1b[91m'1'\x1b[0m'", 'abc']

撰写回答