正则表达式可在字符串中查找关键字以及以下字符

时间:2019-03-25 15:24:17

标签: python regex

我有很多已知的关键字,例如'cat', 'dog', 'rat'

我有一个可以是这样的字符串:

'rat;dog,cat - browncatdog(black)ratratcatdog-whitecat:grey'

我需要找到所有关键字以及紧随其后的所有字符(不包括分号和逗号之类的分隔符以及下一个关键字)。

所以上面字符串的结果应该是这个列表:

'rat', 'dog', 'cat - brown', 'cat', 'dog(black)', 'rat', 'rat', 'cat', 'dog-white', 'cat:grey'

我尝试了几种方法,但最终得到包含多个关键字或缺少某些关键字的项目。

2 个答案:

答案 0 :(得分:0)

尝试一下

>>> [(f[0], f[1][0]) for f in re.findall(r'(rat|dog|cat)(.\w+)', 'rat;dog,cat - browncatdog(black)ratratcatdog-whitecat:grey') if re.match(r'(cat|dog|rat|[,;])', f[1]) is None]
[('cat', ':')]

此致

答案 1 :(得分:0)

我认为使用纯正则表达式是不可能的。 一种技巧是在所有关键字之前添加一个分隔符,然后在其后进行拆分。

>>> s = "rat;dog,cat - browncatdog(black)ratratcatdog-whitecat:grey"
>>> re.split(r"[;,]+", re.sub(r"(cat|dog|rat)",r",\1",s))
['', 'rat', 'dog', 'cat - brown', 'cat', 'dog(black)', 'rat', 'rat', 'cat', 'dog-white', 'cat:grey']