7

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

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

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

    _theFilter = tmp;
}

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

@"Import6652"
将产生 @"Import"

我怎样才能在 iOS 中做到这一点?

谢谢!

4

5 回答 5

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 {}
于 2012-07-10T09:49:50.397 回答
1

请参阅NSRegularExpression的文档

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

于 2012-07-10T09:47:14.133 回答
1

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

斯威夫特3

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
}
于 2016-07-08T07:42:11.923 回答
0

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

stringByTrimmingCharactersInSet
返回一个新字符串,该字符串通过从给定字符集中包含的接收器字符的两端删除。

结合

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

像这样:

[filter stringByTrimmingCharactersInSet:[NSCharacterSet decimalDigitCharacterSet]];

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

于 2012-07-10T09:48:53.187 回答
0

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

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

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

于 2012-07-10T09:49:11.467 回答