我已经研究过这个问题并研究了正则表达式,但我仍然无法得到这个。
我需要在两个分隔符之间找到给定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
有人可以解释一下我出错的地方以及如何解决?
答案 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