Python 使用正则表达式拆分项目列表

Python 使用正则表达式拆分项目列表,python,regex,regex-group,Python,Regex,Regex Group,首先,我有一个由项目列表组成的字符串,这些项目可以通过枚举数逗号/‘and’或文章‘a’/‘an’/‘the’拼接。请注意,如果有枚举数,则可以省略该项目,反之亦然 例如,让我们看看这个输入: a paper, leaf the clock and an angel 这必须分为: 论文 叶 时钟 天使 第一个示例只有单个名称的项目,所以让我们看看另一个例子: a paper with some letters, a torn leaf and clock and an angel doll

首先,我有一个由项目列表组成的字符串,这些项目可以通过枚举数逗号/‘and’或文章‘a’/‘an’/‘the’拼接。请注意,如果有枚举数,则可以省略该项目,反之亦然

例如,让我们看看这个输入:

a paper, leaf the clock and an angel
这必须分为:

论文 叶 时钟 天使

第一个示例只有单个名称的项目,所以让我们看看另一个例子:

a paper with some letters, a torn leaf and clock and an angel doll
这必须分为:

有一些字母的纸 撕裂的叶子 时钟 天使娃娃 我已经为此尝试了一些正则表达式,最接近的用法是:

(?:\b(?P<article>the|an|a)\b)\s(?P<object>\b.+?\b(?=\b(?:the|an|a|$)\b))
当然,我没有考虑“,”/“和“拆分”,因为我无法理解,很遗憾

最后,正如您所看到的,我使用了组来识别/分离文章中的对象。如果可以的话,那就太好了。你有什么建议?

只需使用re.split

进口稀土 a=一张写着一些字母的纸,一片撕破的叶子,一只钟和一个天使娃娃 将要移除的每个分隔符放置在| 关于拆分'、|和| a',a 结果: [,“有字母的纸”,“撕碎的叶子”,“钟”,“天使娃娃”] 如果需要保留分隔符,请使用括号:

[i在re.split'中表示i,|和| a',a如果i] 结果: ['a'、'带字母的纸'、'、'a'、'撕破的叶子'、'时钟'、'天使娃娃']
按照regex中与re.split匹配的降序,列举所有小案例:

进口稀土 s=一张写着一些字母的纸,一片撕破的叶子,一只钟和一个天使娃娃 关于拆分器“^an | ^a | |,a |,an |,and |,an |,an,an,a,an和| an |,s” [,“有字母的纸”,“撕碎的叶子”,“钟”,“天使娃娃”] 其余的只是清理,等等

要保留匹配的内容,请按照以下文档将正则表达式括在括号中:

关于拆分器“^an | ^a | |,a |,an |,and |,an |,an,an,a,an和| an |,s” [,'a','paper with some字母','a','Rate leaf','and','clock','and','angel doll']
关于我想解决的具体任务,我遇到了另一个想法, 步骤如下:

只要有“and”或“or”,后面没有和冠词,就添加默认冠词 和|?!那个| an | a | ^?!将| an | a替换为 从输入文本中删除每个“和”或“,”,现在每个对象都应该用冠词分隔 和|,替换为 将输入内容分离到article+除article之外的所有内容中 P | an | a | P.+?=?:a | an | a\b |[^$]*
PS:如果有人知道最后一个正则表达式的替代方法,请随时发布!:

通过使用re.sub,我们可以用新行替换特定字符串。 在re.sub中,您可以添加任何需要替换为新行的文章

示例代码:

输出:


我建议使用合适的工具,比如NLTK,来解析一种自然语言。你在某些情况下保留了这篇文章,在另一些情况下放弃了它。这是一个错误吗?或者你有没有遗漏一些规则?文章可以在那里,也可以省略,如果有枚举数和或逗号@Mike@georg我理解你说的,这可能是个更好的主意。。。但是NLTK上的许可证仅用于非商业用途。。我可能需要在某个时候将其用于商业用途。@xDGameStudios:NLTK是在Apache 2.0下获得许可的。如果它允许任何商业用途,并且是非版权保留的,那么你不必按照相同的条款发布你的软件。正如我所说的,我需要把文章放在那里a/an/the做一些后期处理!好吧,我明白了。。。但话说回来。。。我需要捕获组文章和对象如果有,我需要将文章保留在那里以便后期处理
s = 'a paper with some letters, a torn leaf and clock and an angel doll'

print(re.sub(r'(and|,)\s', r"\0\n", s))
a paper with some letters
a torn leaf 
clock 
an angel doll