Python基于条件分割字符串

时间:2015-04-03 08:02:26

标签: python regex string split

如果逗号前面有某个正则表达式,我想使用逗号分隔符拆分字符串。考虑我的字符串格式为: "(一堆可能有逗号的东西)FOO_REGEX,(其他可能有逗号的东西)FOO_REGEX,..."我想在逗号上拆分字符串,但前提是它们前面有FOO_REGEX:["(一堆可能有逗号的东西)FOO_REGEX","(其他可能的东西)有逗号)FOO_REGEX",tc。]。

作为一个具体示例,请考虑拆分以下字符串:

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

进入三个字符串列表:

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

在python中有没有简单的方法呢?

2 个答案:

答案 0 :(得分: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']

使用外部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 :(得分:1)

如果FOO_REGEX是固定宽度,您可以使用正面后视。在这里,您将在&#34; $$ asdf,&#34;

之后分割您的线

查看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']