如何使用NSRegularExpression擦除部分NSString

时间:2013-05-22 19:57:55

标签: regex nsregularexpression

我有一个字符串:"My goal today is to work out 30 minutes [Last update: May 20, 2013 by Joe Smith] and eat healthy"

有人可以在 Objective-C 中制作一个NSRegularExpression来提取子字符串:

[Last update: May 20, 2013 by Joe Smith]

我想基本上删除方括号[]之间的字符串部分,这样我的最终字符串就变成:“我今天的目标是锻炼30分钟,吃得健康”

是正确的正则表达式

NSRegularExpression *regex = 
[NSRegularExpression regularExpressionWithPattern:@"[Last Update:*]" 
options:NSRegularExpressionCaseInsensitive error:&error];

我在网上看到了一些以"\b"开头的正则表达式,以及其他使用方括号的正则表达式:"\[Last update:*\]" - 但是这个我得到了一个编译器警告(但没有错误)

2 个答案:

答案 0 :(得分:3)

看起来你正在尝试使用*作为所谓的shell glob:它意味着“匹配任何字符的零或更多”。 Shell globs与正则表达式不同,在正则表达式上下文中,*实际上意味着“匹配前面原子的零个或多个”。在您的情况下,这将意味着“匹配零次或多次:”,这不是您想要的。

你想做的是

@"\\[Last Update:[^]]+\\] ?"

请注意,我们从\\[开始。这里的“实际”正则表达式为\[;我们必须添加一个额外的反斜杠来逃避反斜杠,因为我们在Objective-C字符串中工作。此\[序列与文字左方括号相匹配。 (由于该字符在正则表达式中具有特殊意义,如果文本中存在实际的[,我们需要将其转义。)最后\\]也是如此。

序列[^]]+表示“匹配]以外的任何字符,并尽可能多地匹配”。最后,末尾的?(后面跟一个问号的空格)意味着正则表达式将匹配一个空格(如果有空格)。当您删除匹配的文本时,这将阻止您以一行中的两个空格结束。 (根据输入的格式,您可能希望将?移动到表达式的开头。)

如果您需要有关Objective-C中正则表达式的更多信息,请查看NSRegularExpression documentation

答案 1 :(得分:2)

您可以使用此模式:

\s*\[[^\]]+\]

它将返回括号括号内的数据和前面的空格。

之后你必须按照这些链接来替换这些字符串:

Example of NSRegularExpression(参见NSTextCheckingResult示例)

Example for StringByReplacingOccurancesOfStringstringByReplacingCharactersInRange