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

知道这怎么工作吗?

我正在尝试为您提供一些代码,并且我能够找出一种解决方法,但这可能不是最漂亮的解决方案


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


鸿蒙传说
浏览 203回答 3
3回答

阿波罗的战车

您应该使用re.split并在后面进行负向查找来检查反斜杠字符。import repattern = 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']

qq_花开花谢_0

您可以将“:\”替换为某些内容(只需确保此内容在其他位置的字符串中不存在...您可以使用长期项或其他内容),然后用“:”分隔放回原处。[x.replace("$","\:") for x in str1.replace("\:","$").split(":")]解释:str1 = 'I:would:like:to:find\:out:how:this\:works'将“:”替换为“ $”(或其他):str1.replace("\:","$")Out: 'I:would:like:to:find$out:how:this$works'现在以“:”分隔str1.replace("\:","$").split(":")Out: ['I', 'would', 'like', 'to', 'find$out', 'how', 'this$works']并为每个元素将“ $”替换为“:”:[x.replace("$","\:") for x in str1.replace("\:","$").split(":")]Out: ['I', 'would', 'like', 'to', 'find\\:out', 'how', 'this\\:works']

九州编程

用 re.split前任:import res = "I:would:like:to:find\:out:how:this\:works"print( re.split(r"(?<=\w):", s) )输出:['I', 'would', 'like', 'to', 'find\\:out', 'how', 'this\\:works']
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python