1

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

例如

// 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

有什么建议么?

4

2 回答 2

1

您应该使用re.DOTALL (== re.S) 标志。没有这个标志,.不匹配换行符。

re.DOTALL

制作“。” 特殊字符完全匹配任何字符,包括换行符;没有这个标志,'.' 将匹配除换行符以外的任何内容。

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

您还可以按如下方式指定标志。请参阅正则表达式语法

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

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

  • 使用with open(..) as f代替f = open(...) .... f.close()
  • r'blah'处理正则表达式时使用原始字符串 ( )。
于 2013-08-01T17:15:32.030 回答
-1

您是否尝试过 REGEX 字符串

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

这应该将您的正则表达式绑定到文件的开头和结尾,您的代码很可能当前以第一个右括号结尾。

于 2013-08-01T17:13:51.417 回答