问题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>]

最佳答案

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

>>> 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>>'

10-06 02:33