我正在使用python来读取.nk文件,我正在尝试使用正则表达式来搜索文件中的特定项目。
以下是此.nk文件中1个此类项目的示例:
Viewer {
inputs 2
frame 1073
viewerProcess "common"
input_process false
name Viewer1
xpos -8403
ypos -39859
}
我正在玩这个正则表达式:
viewers = re.findall("(Viewer\s{.*})", TEXT, re.DOTALL)
问题在于它无法停在}符号处。因此,正则表达式在“Viewer \ s {”
之后返回.nk文件中的每一行我在这里缺少什么?
答案 0 :(得分:3)
你需要告诉Python匹配non-greedily(尽可能少):
viewers = re.findall("(Viewer\s{.*?})", TEXT, re.DOTALL)
# ^
否则,您的模式将捕获文件中第一个Viewer\s{
到最后一个}
的所有内容。
答案 1 :(得分:2)
iCodez有一个很好的解决方案;另一种可能的方法是通过使用否定的character class明确表示没有大括号可能成为比赛的一部分:
viewers = re.findall(r"(Viewer\s{[^{}]*})", TEXT, re.DOTALL)