使用python DOTALL标志从未知数量的行中检索数据

时间:2014-08-11 12:17:05

标签: python regex

我试图检索带换行符的段落,所以我使用带有编译S标志的pythons DOTALL标志(DOTALL,S =" Make。匹配任何字符,包括换行符&#34 ;)但我仍然无法让它发挥作用。

在下面的示例中,我尝试从第一个[**]到最后一个[**]获取数据

  

[**]等等[**]

     

     

等(等行重复和未知次数)

     

[**]等等等等......

N.B。上面没有空白的换行符,除了下一个块的收益,即blah etc2(只是无法正确格式化)

我在下面的尝试没有找到任何东西:

re.compile(r'\*{2}\].*\[\*{2}\].*\[\*{2}\]', re.DOTALL|re.S)

然而,直到最后一颗星,即

(r'\*{2}\].*\[\*{2}\].*

它只会检索第一行(按预期方式),但添加\[\*{2}\]并不会返回任何内容。

感谢任何建议,谢谢。

看来我的错误是在我正在使用时正在阅读文件:

with open ("c:/location", r) as txt: for i in txt:

我应该使用的地方:

with open ("c:/location", r) as txt: lines=txt.read()

感谢您的所有回复,并且@tripleee为您设置正确的路径以了解我的错误不在正则表达式中,但是在阅读文件后,谢谢。

2 个答案:

答案 0 :(得分:0)

只考虑你的正则表达式(不清楚你想做什么 - 对不起) 这个正则表达式:

\[\*{2}\].*\[\*{2}\]

将匹配发现的最后一个[**]的第一个[**]以上的任何内容

这个正则表达式:

\[\*{2}\].*?\[\*{2}\]

将匹配[**][**]

之间的任何内容

答案 1 :(得分:0)

我不明白为什么你开始\*{2}\].*的第一次尝试。我用过这个:

re.compile(r'\[\*{2}\](.*)\[\*{2}\]', re.DOTALL)

它正确匹配2 [**]之间的所有内容,甚至是多行。

我添加了括号以在group(1)内部捕获,即没有[**]的字符串。