input_string = """{J. Doe, R. Starr}, {Lorem
{i}psum dolor }, Dol. sit., am. et."""
expected = ['{J. Doe, R. Starr}', '{Lorem\n{i}psum dolor }', 'Dol. sit.', 'am. et.']
def split(s):
parts = []
bracket_level = 0
current = []
# trick to remove special-case of trailing chars
for c in (s + ","):
if c == "," and bracket_level == 0:
parts.append("".join(current))
current = []
else:
if c == "{":
bracket_level += 1
elif c == "}":
bracket_level -= 1
current.append(c)
return parts
assert split(input_string), expected
{a1在Python中可以用一个更短的^ I来代替它:
模式
({(?:[^{}]++|\g<1>)*})(*SKIP)(*FAIL)
-匹配{...{...{}...}...}
类结构(如{
匹配{
,(?:[^{}]++|\g<1>)*
匹配2个备选方案的0+次出现:1)除{
和}
(The[^{}]++
)之外的任何1+字符,2)匹配整个({(?:[^{}]++|\g<1>)*})
子模式的文本)。(*SKIP)(*FAIL)
动词使引擎忽略匹配缓冲区中的全部匹配值,因此,将索引移动到匹配的末尾,并且不保留任何要返回的内容(我们“跳过”匹配的内容)。在\s*,\s*
匹配用0+空格括起来的逗号。在出现
^{pr2}$None
值是因为第一个分支中有一个捕捉组,当第二个分支匹配时该组为空。我们需要在第一个可选分支中使用一个捕获组来进行递归。要删除空元素,请使用“理解”:在这种情况下,可以使用^{} :
下面是正则表达式模式匹配的说明:
^{pr2}$编写您自己的自定义拆分函数:
相关问题 更多 >
编程相关推荐