我正在尝试匹配我要解析的此文件的括号顶部。
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
有什么建议吗?
答案 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*$"
这应该将你的正则表达式绑定到文件的开头和结尾,你的代码很可能在第一个结束时结束。