0

我有一些以下格式的文本:

{{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 ,但我愿意接受任何其他建议。

4

1 回答 1

0

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

\\{\\{st[1-9]:[^}]*(word)[^}]*\\}\\}

如果单个右花括号是单词的一部分的有效字符,它会变得有点复杂,但你应该能够[^}]*(\}?[^}])*or替换(?:(?!\}\}).)*

于 2012-09-25T14:58:36.787 回答