You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从列表字符串中提取第一个换行符(\n)后的目标内容?

问题:提取字符串中第一个换行符后的名称

我有两个列表:

list_1 = ['08667\nST 403', '08667\nST 403', '08667\nST 403']
list_2 = ['12233\nFION', '12233\nFION', '12233\nFION', '12233\nFION', '31147\nARAB\nP1454']

希望提取每个元素中第一个换行符(\n)后的名称,但当前代码处理list_2最后一个元素时,提取出的是P1454而非期望的ARAB。

原代码

def parse_string(string):
    string = string.rsplit('\n', 1)[1]
    return string

list_1 = ['08667\nST 403', '08667\nST 403', '08667\nST 403']
list_2 = ['12233\nFION', '12233\nFION', '12233\nFION', '12233\nFION', '31147\nARAB\nP1454']


new_list_1 = []
new_list_2 = []

for i in range(len(list_1)):
    new_list_1.append(parse_string(list_1[i]))

for i in range(len(list_2)):
    new_list_2.append(parse_string(list_2[i]))

问题现象

  • 处理list_1结果符合预期:
new_list_1
['ST 403', 'ST 403', 'ST 403']
  • 处理list_2时结果不符合预期:
new_list_2
['FION', 'FION', 'FION', 'FION', 'P1454']

解决方案

问题出在rsplit('\n', 1):这个方法会从字符串末尾开始分割,取最后一个换行符后的内容,而你需要的是第一个换行符后、第二个换行符前的内容(如果存在多个换行)。

方法1:使用split仅分割一次

这是最简洁的方式,split('\n', 1)只会分割第一次出现的换行符,直接取分割后的第二个元素:

def parse_string(string):
    return string.split('\n', 1)[1]

方法2:通过索引切片取值

如果需要更精准地控制截取范围,可以通过查找换行符的索引来切片:

def parse_string(string):
    first_nl = string.index('\n')
    second_nl = string.find('\n', first_nl + 1)
    if second_nl != -1:
        return string[first_nl+1 : second_nl]
    else:
        return string[first_nl+1:]

修改后运行代码,new_list_2的结果会变为:

['FION', 'FION', 'FION', 'FION', 'ARAB']

另外,遍历列表可以用更简洁的列表推导式替代原有的for循环:

new_list_1 = [parse_string(item) for item in list_1]
new_list_2 = [parse_string(item) for item in list_2]

内容的提问来源于stack exchange,提问作者George

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 20:40:58