我有一个字符串:"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:*\]"
- 但是这个我得到了一个编译器警告(但没有错误)
答案 0 :(得分:3)
看起来你正在尝试使用*
作为所谓的shell glob:它意味着“匹配任何字符的零或更多”。 Shell globs与正则表达式不同,在正则表达式上下文中,*
实际上意味着“匹配前面原子的零个或多个”。在您的情况下,这将意味着“匹配零次或多次:
”,这不是您想要的。
你想做的是
@"\\[Last Update:[^]]+\\] ?"
请注意,我们从\\[
开始。这里的“实际”正则表达式为\[
;我们必须添加一个额外的反斜杠来逃避反斜杠,因为我们在Objective-C字符串中工作。此\[
序列与文字左方括号相匹配。 (由于该字符在正则表达式中具有特殊意义,如果文本中存在实际的[
,我们需要将其转义。)最后\\]
也是如此。
序列[^]]+
表示“匹配]
以外的任何字符,并尽可能多地匹配”。最后,末尾的?
(后面跟一个问号的空格)意味着正则表达式将匹配一个空格(如果有空格)。当您删除匹配的文本时,这将阻止您以一行中的两个空格结束。 (根据输入的格式,您可能希望将?
移动到表达式的开头。)
如果您需要有关Objective-C中正则表达式的更多信息,请查看NSRegularExpression documentation。
答案 1 :(得分:2)
您可以使用此模式:
\s*\[[^\]]+\]
它将返回括号括号内的数据和前面的空格。
之后你必须按照这些链接来替换这些字符串:
Example of NSRegularExpression(参见NSTextCheckingResult示例)
Example for StringByReplacingOccurancesOfString或stringByReplacingCharactersInRange