使用正则表达式查找分隔符之间的所有单词



我已经研究了这个问题,并研究了regex,但我仍然无法理解。

我需要在两个分隔符之间找到给定txt文件中的所有单词。分隔符为:

** START **
** END **

它看起来很基本,但我还没能得到它。这就是我到目前为止所拥有的,

def extract_words(file):
    infile = open(file, 'r', encoding="utf-8").readlines()
    fileString = ""
    for line in infile:
        fileString += line
        for matchedtext in re.findall(r'(?<=D{2}sSTARTsD{2}).*?(?=D{2}sENDsD{2)', fileString):
            print(matchedtext)

预期操作示例

inputFile.txt

{你好,这里有一些文本不提取这些单词**START**开始提取这些单词。测试1 2 3 4 hello world**结束**这些单词不应该被提取。}

将导致:

start extracting these words though. test 1 2 3 4 hello world

有人能解释一下我哪里出了问题以及如何解决吗?

您的Lookahead上缺少一个右大括号},而此处的.*?当前正在匹配任何字符(换行符除外(,您需要使用s(DOTALL(修饰符来强制点匹配任何字符,包括换行符。

(?=D{2}sENDsD{2 )
                   ^ missing right curly brace

您可以在此处使用以下内容。

re.findall(r'(?s)(?<=D{2}sSTARTsD{2}).*?(?=D{2}sENDsD{2})', fileString)

此外,请注意,D匹配除数字之外的任何内容,例如,如果这些分隔符前面或后面有字母,则它们之间也可能匹配。我会使用*{2}

您的正则表达式格式不正确。上一个D{3}:中缺少一个}

r'(?<=D{3}sSTARTsD{3}).*?(?=D{3}sENDsD{3})'
                                                ^ missing

最新更新