0

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

有人可以NSRegularExpressionObjective-C中制作一个提取子字符串的方法:

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

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

是正确的正则表达式

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

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

4

2 回答 2

3

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

你想做的是

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

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

该序列的[^]]+意思是“匹配除 之外的任何字符],并尽可能多地匹配”。最后,?末尾的(一个空格后跟一个问号)表示正则表达式将匹配一个空格,如果有的话。这将防止您在删除匹配的文本时连续出现两个空格。(根据您输入的格式,您可能希望将 移到?表达式的开头。)

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

于 2013-05-22T20:06:02.527 回答
2

您可以使用此模式:

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

它将返回括号内的数据,包括括号和它们之前的空格。

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

NSRegularExpression 示例(参见 NSTextCheckingResult 示例)

StringByReplacingOccurancesOfStringstringByReplacingCharactersInRange的示例

于 2013-05-22T20:07:39.097 回答