0

我有一个格式如下的文件:

some text
some more text
. . .
. . .
data {
1 2 3 5 yes 10
2 3 4 5 no  11
}
some text
some text

我想data使用以下过程使用正则表达式提取文件的一部分:

proc ExtractData {fileName} {
    set sgd [open $fileName r]
    set sgdContents [read $sgd]
    regexp "data \\{(?.*)\\}" $sgdContents -> data
    puts $data
}

但这给出了以下错误:

couldn't compile regular expression pattern: quantifier operand invalid

我无法弄清楚正则表达式有什么问题。任何帮助将不胜感激。

4

2 回答 2

1

使用这个正则表达式

regexp {data \{(.*)\}} $sgdContents wholematch submatch
puts $submatch

wholematch匹配整个模式。在你的情况下

data {
1 2 3 5 yes 10
2 3 4 5 no  11
}

并且submatch仅匹配大括号内的内容,如下所示:

1 2 3 5 yes 10
2 3 4 5 no  11
于 2013-07-19T05:00:34.410 回答
0

以下正则表达式行有效

regexp "data \\{\\\n(.*?)\\\n\\s*\\}" $sgdContents -> data

原始正则表达式唯一的主要错误是非贪婪匹配指示符 (?) 的错位,它指示正则表达式引擎在找到第一个匹配项后立即停止匹配。

于 2013-07-23T10:38:18.293 回答