我有一个模式,它正在寻找word1,然后是word2,后跟word3,中间有任意数量的字符。 然而,我的文件包含许多随机换行符和其他空格字符 - 这意味着在单词1和2之间或单词2和3之间可能有0个或更多单词和/或0个或更多个新行随机
为什么这段代码不起作用? (它不匹配任何东西)
strings = re.findall('word1[.\s]*word2[.\s]*word3', f.read())
[。\ s] * - 这是我的意思 - 多次找到'。'(任何字符)或'\ s'(换行字符)(*)
答案 0 :(得分:1)
你的reg ex无法工作的原因是因为reg ex-es只尝试匹配一行。当他们找到一个换行符(\n
)并尝试匹配从该模式开头开始的新行上的模式时,它们会停止。
为了使reg ex忽略换行符,您必须将re.DOTALL
作为第三个参数添加到findall
函数中:
strings = re.findall('word1.*?word2.*?word3', f.read(), re.DOTALL)
答案 1 :(得分:0)
你有两个问题:
1).
并不代表括号[]
内的任何特殊内容。
将[]
改为使用()
,改为:(.|\s)
2)\
并不代表你认为它在常规字符串中的作用。
尝试使用原始字符串:
re.findall(r'word1 ..blah..')
注意字符串的r
前缀。
将它们放在一起:
strings = re.findall(r'word1(.|\s)*word2(.|\s)*word3', f.read())
但请注意,这会更改返回的列表。