【问题标题】:regular expressions replace in iOSiOS中的正则表达式替换
【发布时间】:2012-07-09 18:26:16
【问题描述】:

我需要将脏字符串替换为干净字符串:

-(void)setTheFilter:(NSString*)filter
{
    [filter retain];
    [_theFilter release];

    <PSEUDO CODE>
    tmp = preg_replace(@"/[0-9]/",@"",filter);
    <~PSEUDO CODE>

    _theFilter = tmp;
}

这应该消除filter 中的所有数字,以便:

@“Import6652”
会产生@"Import"

如何在 iOS 中做到这一点?

谢谢!

【问题讨论】:

    标签: ios regex nsregularexpression


    【解决方案1】:
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:
                                  @"([0-9]+)" options:0 error:nil];
    
    [regex replaceMatchesInString:str options:0 range:NSMakeRange(0, [str length]) withTemplate:@""];
    

    斯威夫特

    do {
        let regex = try NSRegularExpression(pattern: "([0-9]+)", options: NSRegularExpressionOptions.CaseInsensitive)
        regex.replaceMatchesInString(str, options: NSMatchingOptions.ReportProgress, range: NSRange(0,str.characters.count), withTemplate: "")
    } catch {}
    

    【讨论】:

      【解决方案2】:

      请参阅NSRegularExpression 的文档

      特别是标题为使用正则表达式替换字符串

      的部分

      【讨论】:

        【解决方案3】:

        使用正则表达式替换字符串

        Swift3

        extension String {
            func replacing(pattern: String, withTemplate: String) throws -> String {
                let regex = try RegularExpression(pattern: pattern, options: .caseInsensitive)
                return regex.stringByReplacingMatches(in: self, options: [], range: NSRange(0..<self.utf16.count), withTemplate: withTemplate)
            }
        }
        

        使用

        var string: String = "Import6652"
        do {
            let result = try string.replacing(pattern: "[\\d]+", withTemplate: "")
        } catch {
            // error
        }
        

        【讨论】:

          【解决方案4】:

          在 iOS 4.0+ 中,你可以使用NSRegularExpression:

          使用matchesInString:options:range: 获取所有匹配结果的数组。

          然后从原始字符串中删除它们

          【讨论】:

          • 你可以,但是如果有更好的功能,比如 MSK 的答案,为什么还要麻烦呢?
          【解决方案5】:

          虽然不是通过正则表达式但你可以使用stringByTrimmingCharactersInSet

          stringByTrimmingCharactersInSet
          返回由从两端删除给定的接收者字符组成的新字符串 字符集。

          结合

          decimalDigitCharacterSet
          返回包含十进制数类别中的字符的字符集。

          像这样:

          [filter stringByTrimmingCharactersInSet:[NSCharacterSet decimalDigitCharacterSet]];
          

          警告:它只会删除两端的字符。

          【讨论】:

          • 只需要注意一件事,这仅在数字位于边缘时才有效(即 XXX123 或 123XXX 有效,但 XX123XX 无效)。对于给出的信息,这个答案非常有效,但我想无论如何我都会插话,以防 OP 有其他集合。
          • 你是对的 - 在我的回答中添加了信息以澄清它!
          猜你喜欢
          • 1970-01-01
          • 2019-01-24
          • 2011-07-13
          • 2015-01-24
          • 1970-01-01
          • 1970-01-01
          • 2011-09-07
          • 2021-04-03
          相关资源
          最近更新 更多