首页 > 解决方案 > Python:从文本中提取字符串

问题描述

我有以下格式的文本:

>>name of section a     keyword
#a  
some text
some text
some text
>>END_SECTION
>>name  section b     keyword
#a
some text
some text
some text
>>END_SECTION
continues...

“关键字”可以是通过、失败或警告。

我想编写一个可以得到以下输出的代码:

name of section  keyword

问题是我对python很陌生,不知道如何从文本文件中提取字符串,而结束标记(关键字)可能在三​​个不同的单词之间有所不同。

我尝试使用 # 符号作为字符串的结束标记,但它不起作用。我试过的代码是:

class get_word(object):
   
  def get_sentences(self, name_section):
      with open(filename) as file_content:
        file_content.read().splitlines()
        for line in file_content:
            if name_section in line:
               start_line = file_content.index(line)
               end_line = file_content[start_line:].index('#')
               data = file_content[start_line:start_line + end_line]
               return data 

我已将代码导入到不同的脚本并编写了以下代码:

import get_word

for data in f.get_sentences('name_section_a'):
    print(data)

但给出以下错误:

ValueError: False is not in list

有一个更好的方法吗?例如可以使用 re.match() 吗?

任何帮助将不胜感激!

标签: pythonstring

解决方案


您期望的确切输出尚不清楚,但您可以使用正则表达式来提取字段:

import re

re.findall('(?<=^>>)(?!END_SECTION)(.*)', text, re.M)

输出:

['name of section a     keyword', 'name  section b     keyword']
如果要分隔关键字并删除数字:
re.findall('(?<=^>>)(?!END_SECTION)(.*)\s+\w+\s+(\w+)', t, re.M)

输出:

[('name of section', 'keyword'), ('name  section', 'keyword')]

输入:

text = '''>>name of section a     keyword
#a  
some text
some text
some text
>>END_SECTION
>>name  section b     keyword
#a
some text
some text
some text
>>END_SECTION'''

推荐阅读