使用正则表达式在文本文件中查找一些单词,然后在不同的文本文件中打印它们

To find some words in a text file using regex and later print them in a different text file

我需要使用正则表达式在文本文件 (origin.txt) 中找到一些词,例如 inherited、INHERITANCE、Ingeritable 等,稍后我想在新的文本文件中打印它们 (origin_spp.txt) 以及它们所在的行。

这是我的代码

re_pattern_string = r'(?:inherit|INHERIT|Inherit)*\w'

print('Opening origin.txt')
with open('origin.txt', 'r') as in_stream:
    print('Opening origin_spp.txt')
    with open('origin_spp.txt', 'w') as out_stream:
        for num, line in enumerate (in_stream):
        re_pattern_object = re.compile(re_pattern_string)
        line = line.strip()
        inherit_list = line.split()
        temp_list = re_pattern_object.findall('line')
        complete = origin_list.append('temp_list')
        for word in temp_list:
            out_stream.write(str(num) + '\t{0}\n'.format(word))

print("Done!")
print('origin.txt is closed?', in_stream.closed)
print('origin_spp.txt is closed?', out_stream.closed)

if __name__ == '__main__':
    print(temp_list)

你能帮帮我吗?我什么也没得到,我不知道错误在哪里。

提前致谢

我需要在另一个文本文件中打印我想在 origin.txt 中找到的单词。

这个新文件必须包含 origin.txt 加上 word/s 中的行号。

您的代码有一些问题:

  • 在for里面定义re.compile是多余的。
  • 对于 re_pattern_object.findall('line') 和 origin_list.append('temp_list') 不要用 ''
  • 包装变量
  • 使用 findall 我们不需要迭代行,它适用于整个文本。

因为你没有提供输入和输出我只是猜你想要什么:

import re

re_pattern_string = r'((?:inherit|INHERIT|Inherit)(\w*))'
originmain_list = []
re_pattern_object = re.compile(re_pattern_string)
print('Opening origin.txt')
with open('origin.txt', 'r') as in_stream:
    print('Opening origin_spp.txt')
    with open('origin_spp.txt', 'w') as out_stream:
        for num, line in enumerate(in_stream):
            temp_list = re_pattern_object.findall(line)
            for word in temp_list:
                out_stream.write(str(num) + '\t{0}\n'.format(word[0]))
                originmain_list.append((num, word[0]))

print("Done!")
print('origin.txt is closed?', in_stream.closed)
print('origin_spp.txt is closed?', out_stream.closed)
print(originmain_list)

如果 origin.txt 包含:

inheritxxxxxxx some text INHERITccccc some text
Inheritzzzzzzzz some text
inherit some text INHERIT some text
Inherit some text

origin_spp.txt 中的输出将是

0   inheritxxxxxxx
0   INHERITccccc
1   Inheritzzzzzzzz
2   inherit
2   INHERIT
3   Inherit

命令行输出将是:

Opening origin.txt
Opening origin_spp.txt
Done!
origin.txt is closed? True
origin_spp.txt is closed? True
[(0, 'inheritxxxxxxx'), (0, 'INHERITccccc'), (1, 'Inheritzzzzzzzz'), (2, 'inherit'), (2, 'INHERIT'), (3, 'Inherit')]