首页 > 解决方案 > 如何匹配不属于正则表达式中一组子字符串的字符串?

问题描述

例如:

我有一个字符串是:

k0 + k1 * x + k2 * x ** 2 + a + b + 3

我想扔掉k\d, a,b并返回一个列表。

返回值应该是:

[' + ", ' * x + ', ' * x ** 2 +', '+' + 3']

我试过[^k\d+,a,b]+

但是这个不能将 k 和一个或多个数字组合在一起,实际上它+从结果中删除了所有数字和。

有没有办法解决这个问题?

用于测试的简单python代码:

import re

# this regex is the wrong one
str_format = re.compile(r'[^k\d+,a,b]+')
str = 'k0 + k1 * x + k2 * x ** 2 + b + a +3'
re.findall(str_format, str)

标签: regex

解决方案


字符类用于匹配单个字符,而不是一组字符。在您的情况下,您可以通过拆分模式来实现结果,例如

k\d+|[ab]

匹配k的以及它后面的任何 1+ 数字(作为字符序列)或aor b。然后,您可以删除所有空匹配项并获得最终结果:

import re
text = 'k0 + k1 * x + k2 * x ** 2 + b + a +3'
print (list(filter(None, re.split(r'k\d+|[ab]', text))))

查看在线 Python 演示


推荐阅读