正则表达式适用于单个字符之间的所有匹配
问题描述:
我想找到一个正则表达式,该正则表达式需要一个字符(本例中为“|”)之间的所有出现。 “|”的出现次数可以变化。 所以下面:正则表达式适用于单个字符之间的所有匹配
ABC | DEF | ghijk | L | mnopqrs | tuvwxyz
在理想情况下返回列表:[ '高清', 'ghijk', 'L',“mnopqrs “]。
最好的结果,我从下面的正则表达式得到:
"\|(.*)\|"
但第一和最后一个实例之间产生evertyhing,所以我想解决这个问题,正与一个循环的,但一定要更好的解决方案。我正在使用Python 3中的重新模块。
谢谢!
答
"\|(.*)\|"
这是一个贪婪的匹配..即匹配从第一次到最后一次出现|
符号。尽可能多地匹配贪婪的人。 (仅使用*
)。非贪婪匹配越少越好(使用*?
)。
你需要的是一个全球性非贪婪的匹配。 "\|(.*?)\|"
但对于你的使用情况,如@jsbueno
+0
谢谢!我将看看贪婪/非贪婪匹配的区别。 – Tim
提到算了正则表达式,只需使用字符串'split'方法拆分通过
|
符号会更合适。 'In:]:“abc | def | ghijk | l | mnopqrs | tuvwxyz”.split(“|”) Out]:['abc','def','ghijk','l','mnopqrs', 'tuvwxyz']' – jsbuenoSplit不起作用,因为它返回abc和tuvwxyz,这不是必需的。 – 2017-06-02 16:05:42
@RudyTheHunter如此舍弃第一个和最后一个结果。这几乎不意味着解决方案“不起作用”。 – 2017-06-02 16:21:30