基于条件的 Python 字符串分割

5
我希望能够使用逗号分隔符拆分字符串,但仅在逗号之前有特定的正则表达式时才进行拆分。考虑字符串的格式如下所示:"(可能包含逗号的一堆内容) FOO_REGEX, (可能包含逗号的其他内容) FOO_REGEX, ...",我想要在逗号上进行分割,但仅在它们之前有FOO_REGEX时进行分割:["(可能包含逗号的一堆内容) FOO_REGEX", "(可能包含逗号的其他内容) FOO_REGEX", ...]。
以一个具体的例子为例,考虑拆分以下字符串:
"hi, hello! $$asdf, I am foo, bar $$jkl, cool" 

将其转换为包含三个字符串的列表:
["hi, hello! $$asdf", 
"I am foo, bar $$jkl", 
"cool"]

有没有在Python中更简单的方法可以做到这一点?
2个回答

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
希望这个很快被添加进去。因为你提供的链接真的很棒。 - Halcyon Abraham Ramirez

1
如果FOO_REGEX是固定宽度的,您可以使用正向回顾。在这里,您将在“$$asdf,”之后分割您的行。
请查看一个示例工作程序
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'] 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接