我需要将脏字符串替换为干净的字符串:
-(void)setTheFilter:(NSString*)filter
{
[filter retain];
[_theFilter release];
<PSEUDO CODE>
tmp = preg_replace(@"/[0-9]/",@"",filter);
<~PSEUDO CODE>
_theFilter = tmp;
}
这应该消除filter
中的所有数字,以便:
@ “Import6652”
会产生@“导入”
我该如何在iOS中完成?
谢谢!
答案 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)
特别是标题为使用正则表达式替换字符串
的部分答案 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:
获取所有匹配结果的数组。
然后从原始字符串中删除它们