首页 > 解决方案 > 使用 str.split 分割多行

问题描述

尝试使用 str.split 单行拆分来拆分多行段落可以正常工作。str.split 是拆分多行的正确方法吗?我在这里缺少什么?单行拆分正常工作示例:

dmap_lines = """Nople Normal Altar1-truck-Altar2,Altar2-train-Cansomme,Cansomme-flight-Karoh,Karoh-truck-Nople"""
destinations = []
remainders1 = []
stages = []
for line in dmap_lines:
    destination, remainder1, remainder = dmap_lines.split(' ')
    destinations.append(destination)
    remainders1.append(remainder1)
    remainder = remainder.split(',')
    stages.append(remainder)
print(destination)
print(remainder1)
print(type(remainder))
print(remainder)

Expected Output: 
Nople
Normal
<class 'list'>
['Altar1-truck-Altar2', 'Altar2-train-Cansomme', 'Cansomme-flight-Karoh', 'Karoh-truck-Nople']

多行代码:

dmap_lines = """Nople Normal Altar1-truck-Altar2,Altar2-train-Cansomme,Cansomme-flight-Karoh,Karoh-truck-Nople\nDria Normal Altar1-truck-Altar2,Altar2-train-Mala1,Mala1-truck-Mala2,Mala2-flight-Dria"""
destinations = []
remainders1 = []
stages = []
for line in dmap_lines:
    destination, remainder1, remainder = dmap_lines.split(' ')
    destinations.append(destination)
    remainders1.append(remainder1)
    remainder = remainder.split(',')
    stages.append(remainder)
print(destination)
print(remainder1)
print(type(remainder))
print(remainder)

Receiving error in output: 
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-78-9eb9f8fa1c64> in <module>
      4 stages = []
      5 for line in dmap_lines:
----> 6     destination, remainder1, remainder = dmap_lines.split(' ')
      7     destinations.append(destination)
      8     remainders1.append(remainder1)

ValueError: too many values to unpack (expected 3)

预期输出:

Nople
Normal
<class 'list'>
['Altar1-truck-Altar2', 'Altar2-train-Cansomme', 'Cansomme-flight-Karoh', 'Karoh-truck-Nople']

Dria
Normal
<class 'list'>
['Altar1-truck-Altar2,Altar2-train-Mala1,Mala1-truck-Mala2,Mala2-flight-Dria']

为什么 for 循环不遍历多行并将字符串拆分为多个部分?

标签: python

解决方案


有什么理由re.findall在这里不是更好的方法:

dmap_lines = "Nople Normal Altar1-truck-Altar2,Altar2-train-Cansomme,Cansomme-flight-Karoh,Karoh-truck-Nople"
matches = re.findall(r'\b\w+-\w+-\w+\b', dmap_lines)
print(matches)

这打印:

['Altar1-truck-Altar2', 'Altar2-train-Cansomme', 'Cansomme-flight-Karoh',
 'Karoh-truck-Nople']

要获取单个 CSV 字符串,请使用join

csv = ','.join(matches)
print(csv)

这打印:

Altar1-truck-Altar2,Altar2-train-Cansomme,Cansomme-flight-Karoh,Karoh-truck-Nople

推荐阅读