正则表达式在iOS中替换

时间:2012-07-10 09:43:00

标签: ios regex nsregularexpression

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

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

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

    _theFilter = tmp;
}

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

@ “Import6652”
会产生@“导入”

我该如何在iOS中完成?

谢谢!

5 个答案:

答案 0 :(得分:22)

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 {}

答案 1 :(得分:1)

请参阅NSRegularExpression

的文档

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

的部分

答案 2 :(得分:1)

使用正则表达式替换代码

<强> 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
}

答案 3 :(得分:0)

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

  

<强> stringByTrimmingCharactersInSet
  返回由 从两端删除的新字符串 包含在给定的接收者字符中   字符集。

结合使用
  

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

像这样:

[filter stringByTrimmingCharactersInSet:[NSCharacterSet decimalDigitCharacterSet]];

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

答案 4 :(得分:0)

在iOS 4.0+中,您可以使用NSRegularExpression

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

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