如果逗号前面有某个正则表达式,我想使用逗号分隔符拆分字符串。考虑我的字符串格式为: "(一堆可能有逗号的东西)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中有没有简单的方法呢?
答案 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;
之后分割您的线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']