如何忽略python正则表达式中的多个空格字符和单词

时间:2013-04-02 00:00:30

标签: python regex

我有一个模式,它正在寻找word1,然后是word2,后跟word3,中间有任意数量的字符。 然而,我的文件包含许多随机换行符和其他空格字符 - 这意味着在单词1和2之间或单词2和3之间可能有0个或更多单词和/或0个或更多个新行随机

为什么这段代码不起作用? (它不匹配任何东西)

strings = re.findall('word1[.\s]*word2[.\s]*word3', f.read())

[。\ s] * - 这是我的意思 - 多次找到'。'(任何字符)或'\ s'(换行字符)(*)

2 个答案:

答案 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())

但请注意,这会更改返回的列表。