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

时间:2014-05-28 03:26:10

标签: python 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}\sSTART\s\D{2}).*?(?=\D{2}\sEND\s\D{2)', fileString):
            print(matchedtext)

预期操作的示例

inputFile.txt

  

{   你好,这里有些文字不提取这些单词** START **虽然开始提取这些单词。测试1 2 3 4你好世界** END **不应该提取这些单词。   }

会导致:

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

有人可以解释一下我出错的地方以及如何解决?

2 个答案:

答案 0 :(得分:3)

你的 Lookahead 上缺少一个右大括号}.*?这里目前正在匹配任何角色(除了换行符),你需要使用s DOTALL )修饰符强制点匹配任何字符,包括换行符。

(?=\D{2}\sEND\s\D{2 )
                   ^ missing right curly brace

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

re.findall(r'(?s)(?<=\D{2}\sSTART\s\D{2}).*?(?=\D{2}\sEND\s\D{2})', fileString)

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

答案 1 :(得分:0)

你的正则表达形式不正确。上一个}

缺少\D{3}
r'(?<=\D{3}\sSTART\s\D{3}).*?(?=\D{3}\sEND\s\D{3})'
                                                ^ missing