首页 > 解决方案 > Python 3:在特定条件下拆分字符串

问题描述

我很难在 Python 3 中将字符串拆分为特定部分。字符串基本上是一个以冒号 (:) 作为分隔符的列表。

仅当冒号 (:) 以反斜杠 (\) 为前缀时,它才算作分隔符,而是列表项的一部分。

例子:

String --> I:would:like:to:find\:out:how:this\:works

Converted List --> ['I', 'would', 'like', 'to', 'find\:out', 'how', 'this\:works']

知道这如何工作吗?

@Bertrand 我试图给你一些代码,我能够找到一个解决方法,但这可能不是最漂亮的解决方案

text = "I:would:like:to:find\:out:how:this\:works"

values = text.split(":")
new = []
concat = False
temp = None

for element in values:

    # when one element ends with \\

    if element.endswith("\\"):
        temp = element
        concat = True

    # when the following element ends with  \\ 
    # concatenate both before appending them to new list

    elif element.endswith("\\") and temp is not None:
        temp = temp + ":" + element
        concat = True

   # when the following element does not end with \\
   # append and set concat to False and temp to None

    elif concat is True:
        new.append(temp + ":" + element)
        concat = False
        temp = None

   # Append element to new list

    else:
        new.append(element)

print(new)

输出:

['I', 'would', 'like', 'to', 'find\\:out', 'how', 'this\\:works']

标签: pythonstringpython-3.xsplitdelimiter

解决方案


您应该使用re.split并执行否定的lookbehind 来检查反斜杠字符。

import re
pattern = r'(?<!\\):'
s = 'I:would:like:to:find\:out:how:this\:works'
print(re.split(pattern, s))

输出:

['I', 'would', 'like', 'to', 'find\\:out', 'how', 'this\\:works']

推荐阅读