我有以下格式的文字:
{{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,但我愿意接受任何其他建议。
答案 0 :(得分:0)
当前正则表达式的问题在于,.*
将与句子末尾的}}
匹配,您需要确保正则表达式的内部部分永远不会超过{ {1}},这是一种方法:
}}
如果单个结束大括号是单词部分的有效字符,则会更加复杂,但您应该能够将\\{\\{st[1-9]:[^}]*(word)[^}]*\\}\\}
替换为[^}]*
或(\}?[^}])*