python正则表达式根据标准分裂

时间:2015-04-19 08:01:50

标签: python regex

跟进问题Python Regex - replace a string not located between two specific words 因为答案不完整。

给定字符串str,根据" ::"进行拆分,同时忽略" ::"介于"<"之间和">"括号。

预期投入和产出:

input  a :: <<a :: b> c>::<a < a < b:: b> :: b> :: b> ::      a
output [a , <<a :: b> c>,<a < a < b:: b> :: b> :: b> ,      a]

input a< b <c a>>
output [a< b <c a>>]

input a:<a b>
output [a:<a b>]

1 个答案:

答案 0 :(得分:1)

这种情况只需要一个if else条件。如果输入字符串中存在任何::子字符串,则会进行拆分,否则它将返回实际的输入字符串。

>>> def csplit(s):
        if '::' in s:
            return [i for i in regex.split(r'(<(?:(?R)|[^<>])*>)|::', s) if i and i != ' ']
        else:
            return s


>>> csplit('a :: <<a :: b> c>::<a < a < b:: b> :: b> :: b> ::      a')
['a ', '<<a :: b> c>', '<a < a < b:: b> :: b> :: b>', '      a']
>>> csplit('a:<a b>')
'a:<a b>'
>>> csplit('a< b <c a>>')
'a< b <c a>>'