正则表达式适用于单个字符之间的所有匹配

问题描述:

我想找到一个正则表达式,该正则表达式需要一个字符(本例中为“|”)之间的所有出现。 “|”的出现次数可以变化。 所以下面:正则表达式适用于单个字符之间的所有匹配

ABC | DEF | ghijk | L | mnopqrs | tuvwxyz

在理想情况下返回列表:[ '高清', 'ghijk', 'L',“mnopqrs “]。

最好的结果,我从下面的正则表达式得到:

"\|(.*)\|" 

但第一和最后一个实例之间产生evertyhing,所以我想解决这个问题,正与一个循环的,但一定要更好的解决方案。我正在使用Python 3中的重新模块。

谢谢!

+2

提到算了正则表达式,只需使用字符串'split'方法拆分通过|符号会更合适。 'In:]:“abc | def | ghijk | l | mnopqrs | tuvwxyz”.split(“|”) Out]:['abc','def','ghijk','l','mnopqrs', 'tuvwxyz']' – jsbueno

+0

Split不起作用,因为它返回abc和tuvwxyz,这不是必需的。 – 2017-06-02 16:05:42

+0

@RudyTheHunter如此舍弃第一个和最后一个结果。这几乎不意味着解决方案“不起作用”。 – 2017-06-02 16:21:30

使用下面的正则表达式:

(?<=\|)([a-zA-Z]+)(?=\|) 

这里是一个工作示例:Regex101

它使用一个向后看(?<=\|),以确保该字母是由管道和前瞻preceeded (?=\|)以确保字母后跟管道。

+0

你并不需要一个捕获组,因为整个比赛捕获了所需的结果。 – 2017-06-02 16:22:56

+0

谢谢!事实上,我需要在括号内加上0-9,因为在“真实”情况下也有数字。我不知道这个超前的后视镜,这真的很酷! – Tim

"\|(.*)\|" 这是一个贪婪的匹配..即匹配从第一次到最后一次出现|符号。尽可能多地匹配贪婪的人。 (仅使用*)。非贪婪匹配越少越好(使用*?)。

你需要的是一个全球性非贪婪的匹配。 "\|(.*?)\|"

但对于你的使用情况,如@jsbueno

+0

谢谢!我将看看贪婪/非贪婪匹配的区别。 – Tim