Regex stringByReplacingMatchesInString(替换带引号的字符串中的空格)

时间:2018-06-08 15:39:56

标签: regex replace nsstring space quotes

上下文是一个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 *)哪个不合适

我将非常感谢您的帮助! 感谢

1 个答案:

答案 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

标记天气晴朗

令牌酷

希望它可以帮助他人。