从NSString中删除\(仅从转义序列中删除)

时间:2014-08-11 06:53:11

标签: ios objective-c nsstring

我在SO上尝试(搜索)各种可能的解决方案,徒劳无功。他们中的大多数只是简单地替换所有出现的反斜杠,并且不尊重原本应该不受影响的反斜杠。

例如,如果我有一个嗨,那就是我。你怎么样?,它应该是嗨,这是我。你好吗?。但是,如果有人试图通过ASCII艺术创作,比如

\\ // \\ // \\ //

// \\ // \\ // \\

(甚至SO也不会让我按原样添加文字,上面的文字需要额外的反斜杠才能正确显示。)

我无法使用[myString stringByReplacingOccurrencesOfString:@"\\" withString:@""];,因为它会替换所有反斜杠。我不希望这样。

我希望字符串按原样显示。

注意:此处讨论的字符串是NSDictionary中从Web服务收到的JSON值。该用途是在聊天客户端之类的服务中,因此正确处理文本非常重要。

ULTRA重要提示:只要完成工作,我就会接受所有想法,如图书馆功能,正则表达,人为牺牲。

1 个答案:

答案 0 :(得分:1)

尝试这个...我无法理解你的问题,但它可能对你有帮助,我想是的

- (void)remove:(NSString*)str
{
    NSString* const pattern = @"(\"[^\"]*\"|[^, ]+)";

    NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:pattern
                                                                      options:0
                                                                        error:nil];

    NSRange searchRange = NSMakeRange(0, [str length]);
    NSArray *matches = [regex matchesInString:str
                                      options:0
                                        range:searchRange];

    for (NSTextCheckingResult *match in matches) {
        NSRange matchRange = [match range];
        NSLog(@"%@", [str substringWithRange:matchRange]);
    }
    NSLog(@"%@",str);
}

调用此方法..

NSString*  str = @"Hi, it\'s me. How\'re you doing?";
    [self remove:str];

然后输出

Hi, it's me. How're you doing?