2015-04-03 34 views
3

如果逗号前面有某个正则表达式,我想使用逗号分隔符来拆分字符串。考虑一下我的字符串格式为: “(可能有逗号的东西一堆)FOO_REGEX,(可能有逗号的其他东西)FOO_REGEX,...”我想用逗号分割字符串,但仅限于如果他们前面有FOO_REGEX:[“(可能有逗号的东西)FOO_REGEX”,“(其他可能有逗号的东西)FOO_REGEX”,tc。]。基于条件的Python拆分字符串

举一个具体的例子,考虑拆分以下字符串:

"hi, hello! $$asdf, I am foo, bar $$jkl, cool" 

分为三个串名单:

["hi, hello! $$asdf", 
"I am foo, bar $$jkl", 
"cool"] 

有没有简单的方法在Python做到这一点?

回答

1

如果FOO_REGEX为固定宽度,则可以使用正面后视。在这里,你会得到后您的线路拆分 “$$ ASDF”

看到一个sample working program

import re  
str = 'hi, hello! $$asdf, I am foo, bar $$jkl, cool' 
splts = re.split('(?<=\$\$asdf), *', str) 
print splts 

输出:

['hi, hello! $$asdf', 'I am foo, bar $$jkl, cool'] 
2

你可以使用re.findall代替re.split

>>> import re 
>>> s = "hi, hello! $$asdf, I am foo, bar $$jkl, cool" 
>>> [j for i in re.findall(r'(.*?\$\$[^,]*),\s*|(.+)', s) for j in i if j] 
['hi, hello! $$asdf', 'I am foo, bar $$jkl', 'cool'] 

OR

使用外部regex模块,以支持可变长度回顾后因为re将不支持可变长度向后断言。

>>> import regex 
>>> s = "hi, hello! $$asdf, I am foo, bar $$jkl, cool" 
>>> regex.split(r'(?<=\$\$[^,]*),\s*', s) 
['hi, hello! $$asdf', 'I am foo, bar $$jkl', 'cool'] 
+1

希望这会很快添加。因为你给的链接太棒了 – 2015-09-23 10:46:01