匹配文件的顶级括号

时间:2013-08-01 17:10:26

标签: python regex

我正在尝试匹配我要解析的此文件的括号顶部。

e.g。

// some other garbage
Package()
{
// ... lots of garbage in here including nested Package() and commented code
}
// some other garbage

这是我的尝试,但是由于某种原因它在中间随机切断。我已经通过NotePad ++验证了顶级匹配,这意味着匹配中的其他所有内容。

import re

f = open('someTextFile.txt', 'r')
contents = f.read()

r = re.compile("Package\(\)\s*{(.+)\s*}")
m = r.search(contents)
inner_str = m.group(1)
print inner_str

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

您应该使用re.DOTALL(== re.S)标志。如果没有此标记,则.与换行符不匹配。

  

re.DOTALL

     

制作'。'特殊字符匹配任何字符,包括a   新队;没有这个标志,'。'将匹配除换行符之外的任何内容。

import re

with open('t.txt', 'r') as f:
    contents = f.read()

r = re.compile(r"Package\(\)\s*{(.+)\s*}", re.DOTALL)
m = r.search(contents)
inner_str = m.group(1)
print inner_str

您还可以指定标志如下。请参阅Regular expression syntax

r = re.compile(r"(?s)Package\(\)\s*{(.+)\s*}")

注意:与问题没有直接关系

  • 使用with open(..) as f代替f = open(...) .... f.close()
  • 在处理正则表达式时使用原始字符串(r'blah')。

答案 1 :(得分:-1)

您是否尝试过REGEX字符串

"^\s*Package\(\)\s*{(.+)\s*}\s*$"

这应该将你的正则表达式绑定到文件的开头和结尾,你的代码很可能在第一个结束时结束。