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

如何在多行字符串中输出包含'-'的指定列?

提取多行字符串中包含'-'的列

嘿,你想到的zip思路完全可行,我给你拆解具体的实现步骤,用Python来举例说明:

核心思路

  1. 把多行字符串拆分成单独的行列表
  2. 用zip(*行列表)转置行和列——这一步会把原来的每一列转换成一个元组(每个元组里是各行对应位置的字符)
  3. 过滤出包含'-'的列
  4. 把过滤后的列再转置回行的格式,输出结果

代码实现(假设每行长度一致)

先看一个简单的示例,假设你的多行字符串每行长度相同:

# 示例多行字符串
multi_line_str = """abc-def-ghi
jkl-mno-pqr
stu-vwx-yz"""

# 1. 拆分每行,得到行列表
lines = multi_line_str.splitlines()

# 2. 转置行和列,每个元素是一列的字符元组
columns = zip(*lines)

# 3. 过滤出包含'-'的列,转成字符串
filtered_columns = [''.join(col) for col in columns if '-' in col]

# 4. 把过滤后的列转置回行,拼接成结果字符串
result = '\n'.join([''.join(row) for row in zip(*filtered_columns)])

# 输出结果
print(result)

运行这段代码会输出:

--
--
--

(因为原字符串里第4位和第8位的列都包含'-',所以提取这两列后,每行就是两个'-')

处理每行长度不一致的情况

如果你的多行字符串每行长度不一样,zip会默认取最短行的长度,这时候可以用itertools.zip_longest来填充缺失的字符(比如空格),保证所有列都能被处理:

from itertools import zip_longest

# 示例不等长的多行字符串
multi_line_str = """abc-def
jkl-mno-pqr
stu-vwx"""

lines = multi_line_str.splitlines()

# 用空格填充到最长行的长度,转置列
columns = zip_longest(*lines, fillvalue=' ')

# 过滤含'-'的列
filtered_columns = [''.join(col) for col in columns if '-' in col]

# 转置回行并拼接结果
result = '\n'.join([''.join(row) for row in zip(*filtered_columns)])

print(result)

运行结果:

-
-
-

小细节说明

  • zip(*lines)里的*是解包操作,把lines里的每一行作为zip的一个参数,这样zip就会按位置把各行的字符配对,实现转置
  • 检查列是否包含'-'用'-' in col,只要列里有一个'-'就会被保留
  • 如果需要严格匹配“列中所有字符都是'-'”,可以改成all(c == '-' for c in col),根据你的实际需求调整

这样应该就能完美解决你的问题啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 06:52:57