首页 > 解决方案 > 使用正则表达式通过带前缀的逗号分隔字符串

问题描述

这是一个非常基本的问题,但出于某种原因,我正在努力构建正则表达式。我有一堆以X (末尾的空格)开头的字符串,然后是一个字符串列表(可能有多个单词),它们用逗号分隔并在末尾有一个点。

例子:

X abc, abd.
X abc, abd, abcd.
X abc abd, abc.
X asdas, asdasd, adsasda, asdasda.
X asdas asdasda, asdasdas asdasda, asdasdasas, asdasddas.

我正在尝试使用该re模块来获取逗号之间所有字符串的列表,所以我得到:

['abc', 'abd']
['abc', 'abd', 'abcd']
['abc abd', 'abc']
['asdas', 'asdasd', 'adsasda', 'asdasda']
['asdas asdasda', 'asdasdas asdasda', 'asdasdasas', 'asdasddas']

我试过了:

match = re.search('X\s+((.*)\,)+(.*)\.', content.text)

但它看起来不起作用:

在此处输入图像描述

我可以在这里使用哪个正则表达式?

请注意,字符串可能包含数字和特殊字符(like:;()和其他字符)。

标签: pythonregex

解决方案


这是一种仅使用正则表达式即可实现您想要的方法:

import re

lst = ['X abc, abd.',
       'X abc, abd, abcd.',
       'X abc abd, abc.',
       'X asdas, asdasd, adsasda, asdasda.',
       'X asdas asdasda, asdasdas asdasda, asdasdasas, asdasddas.']

[re.split(", ", re.search("X\s(.*)\.", i).group(1)) for i in lst]

在此处输入图像描述

此方法使用部分正则表达式:

import re

lst = ['X abc, abd.',
       'X abc, abd, abcd.',
       'X abc abd, abc.',
       'X asdas, asdasd, adsasda, asdasda.',
       'X asdas asdasda, asdasdas asdasda, asdasdasas, asdasddas.']

[[j.strip() for j in re.split(",", i.strip("X."))] for i in lst]

在此处输入图像描述


推荐阅读