Objective C正则表达式用于标记句子

时间:2012-09-25 14:47:26

标签: objective-c regex

我有以下格式的文字:

{{st1:[[word1]]-[[word2]]s [[word1]] [[word3]]}} {{st2:[[word2]] [[word3]] [[word1]]-[[word4]]s.}}

我想过滤掉包含给定单词(签名{{st[0-9]: }})的句子(签名[[word]])。因此,如果我要搜索[[word1]],则输出应为

{{st1:[[word1]]-[[word2]]s [[word1]] [[word3]]}} 
{{st2:[[word2]] [[word3]] [[word1]]-[[word4]]s.}} 

如果我正在搜索[[word4]],则输出应为

{{st2:[[word2]] [[word3]] [[word1]]-[[word4]]s.}}

到目前为止,我已编写了以下代码,但无法实现上述目标。请帮我纠正。

NSString* aString = @"{{st1:[[word1]]-[[word2]]s [[word1]] [[word3]]}} {{st2:[[word2]] [[word3]] [[word1]]-[[word4]]s.}}";
NSString *regexString   = @"\\{\\{st[1-9]:.*(word).*\\}\\}";
for(NSString *match in [aString componentsMatchedByRegex:regexString])
    NSLog(@"%@", match);

我正在使用RegexKitLite,但我愿意接受任何其他建议。

1 个答案:

答案 0 :(得分:0)

当前正则表达式的问题在于,.*将与句子末尾的}}匹配,您需要确保正则表达式的内部部分永远不会超过{ {1}},这是一种方法:

}}

如果单个结束大括号是单词部分的有效字符,则会更加复杂,但您应该能够将\\{\\{st[1-9]:[^}]*(word)[^}]*\\}\\} 替换为[^}]*(\}?[^}])*