【问题标题】:Python, parse string by extracting characters and digits substringPython,通过提取字符和数字子字符串来解析字符串
【发布时间】:2021-12-11 15:40:24
【问题描述】:

我有一个字符串,由一些机器学习算法产生,一般由多行组成。在开头和结尾可以有一些不包含任何字符的行(空格除外),中间应该有 2 行,每行包含一个单词,后跟一些数字和(有时)其他字符。

类似的东西


first_word  3 5 7 @  4
second_word 4 5 67| 5 [


我需要提取两个单词和数字字符。

我可以通过执行以下操作来消除空行:

lines_list = initial_string.split("\n")
for line in lines_list:
    if len(line) > 0 and not line.isspace():
        print(line)

但现在我想知道:

  1. 如果有更稳健、更通用的方法
  2. 如何通过提取单词和数字来解析剩余的 2 条中心线中的每一条(如果有的话,丢弃混合在数字之间的其他字符)

我认为 reg 表达式可能很有用,但我从来没有真正使用过它们,所以我现在有点挣扎

【问题讨论】:

  • 您期望的确切输出是什么?

标签: python string text-parsing


【解决方案1】:

我会在这里使用 re.findall:

inp = '''first_word  3 5 7 @  4
second_word 4 5 67| 5 ['''
matches = re.findall(r'\w+', inp)
print(matches)  # ['first_word', '3', '5', '7', '4', 'second_word', '4', '5', '67', '5']

如果您想单独处理每一行,那么只需在 CR?LF 上拆分输入并使用相同的方法:

inp = '''first_word  3 5 7 @  4
second_word 4 5 67| 5 ['''
lines = inp.split('\n')
for line in lines:
    matches = re.findall(r'\w+', line)
    print(matches)

打印出来:

['first_word', '3', '5', '7', '4']
['second_word', '4', '5', '67', '5']

【讨论】:

  • 您的答案非常适合我发布的案例,但我不得不修改问题,因为我获得了一些关于我正在解析的字符串的新信息。你现在能再看看吗?或者,我可以接受上一个问题并在另一个问题中询问新点
猜你喜欢
  • 2021-12-11
  • 2010-10-18
  • 2020-10-04
  • 2018-07-13
  • 2013-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-02
相关资源
最近更新 更多