上下文是一个IOS应用程序。 我想替换括号括起来的空格。
例如:
Toto"是Bill"应该成为 Toto"是#Bill"
天气晴朗,清澈见底。应该成为 天气很明亮#和#clear"
我已根据另一个使用以下代码进行了试用 post
NSString *pattern = @"(?:(?<=^\")(\\s+))|(?:(?!^\")(\\s+)(?=.))|(?:(\\s+)(?=\"$))"; // (?:(?<=^")(\s+))|(?:(?!^")(\s+)(?=.))|(?:(\s+)(?="$))
NSError *error = nil;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:&error];
NSString *modifiedString = [regex stringByReplacingMatchesInString:string options:0 range:NSMakeRange(0, [string length]) withTemplate:@"#"];
NSLog(@"modified %@", modifiedString);
但这不行。
所有空格都被替换(Toto#&#34;#Bill&#34;)
我只用(?:(?!^&#34;)(\ s +)(?=。))获得相同的结果
我自己制作了一个(?:\&#34; \ S *)(\ s)(?:\ S *)哪个不合适
我将非常感谢您的帮助! 感谢
答案 0 :(得分:0)
这是一个解决方案,我正在使用。这可能并不完美,但它可以满足我的需求。
正如WiktorStribiżew所指出的,我的问题是我的模式的第一个字符和最后一个字符是相同的字符“ 他向我提出了一个解决方案,我发现它过于苛刻,但这是必要的,因为目标C中没有回调函数。
作为替代方案,以下是我如何解决我的问题(替换搜索框的引用字符串中的空格):
1)我在“搜索框”字符串
的末尾添加了一个空格NSString * searchstring1 = [searchString stringByAppendingString:@" "];
2)我使用以下正则表达式来替换空格 (?:(?&lt; =“^”])(?= \ w)| [^ \ S“])(?= [^”] “\ s )
NSString *pattern = @"(?:(?<=\"^\"])(?=\\w)|[^\\S\"])(?=[^\"]*\"\\s* )"; // (?:(?<="^"])(?=\w)|[^\S"])(?=[^"]*"\s* )
NSError *error = nil;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:&error];
NSString *searchstring2 = [regex stringByReplacingMatchesInString:searchstring1 options:0 range:NSMakeRange(0, [searchstring1 length]) withTemplate:@"xxx"];
NSLog(@"modified %@", searchstring2);
3)我将所有的标记隔离开来搜索(用空格分隔)
NSMutableArray *words = (NSMutableArray *)[searchstring2 componentsSeparatedByString:@" "];
4)恢复引用字符串中的空格并删除引号
NSString *token;
for(token in words)
{
token = [token stringByReplacingOccurrencesOfString:@"xxx" withString:@" "];
token = [token stringByReplacingOccurrencesOfString:@"\"" withString:@""];
NSLog(@"token %@\n", token);
}
以下搜索字符串:比尔“天气晴朗”很酷 将提供以下输出
令牌Bill
标记天气晴朗
令牌酷
希望它可以帮助他人。