我试图检索带换行符的段落,所以我使用带有编译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为您设置正确的路径以了解我的错误不在正则表达式中,但是在阅读文件后,谢谢。
答案 0 :(得分:0)
只考虑你的正则表达式(不清楚你想做什么 - 对不起) 这个正则表达式:
\[\*{2}\].*\[\*{2}\]
将匹配发现的最后一个[**]
的第一个[**]
以上的任何内容
这个正则表达式:
\[\*{2}\].*?\[\*{2}\]
将匹配[**]
和[**]
答案 1 :(得分:0)
我不明白为什么你开始\*{2}\].*
的第一次尝试。我用过这个:
re.compile(r'\[\*{2}\](.*)\[\*{2}\]', re.DOTALL)
它正确匹配2 [**]
之间的所有内容,甚至是多行。
我添加了括号以在group(1)
内部捕获,即没有[**]
的字符串。