我喜欢使用正则表达式将“我跑了 12 英里”更改为“我跑了 24 英里”。 “12”可以是任何数字。我使用函数“replace2()”进行数学运算。传递给函数 replace2("$1") 的捕获参数“$1”没问题。请帮忙!
func replace( str:String, pattern : String, repl:String)->String?{
let regex = NSRegularExpression .regularExpressionWithPattern(pattern, options: nil,error: nil)
let replacedString = regex.stringByReplacingMatchesInString( str, options: nil,
range: NSMakeRange(0, countElements( str)), withTemplate: repl )
return replacedString
}
replace( "I run 12 miles and walk 12.45 km","\\d+(.\\d+)?", "-")!
func replace2(x: String)->String {
let xx = x.toInt()! * 2 // error : return nil?
return String(format: "\(xx)")
}
replace( "I run 12 miles ","(\\d+)", replace2("$1") )! // error
最佳答案
在 Playground 上试试这个:
let str1: NSString = "I run 12 miles"
let str2 = "I run 12 miles"
let match = str1.rangeOfString("\\d+", options: .RegularExpressionSearch)
let finalStr = str1.substringWithRange(match).toInt()
let n: Double = 2.2*Double(finalStr!)
let newStr = str2.stringByReplacingOccurrencesOfString("\\d+", withString: "\(n)", options: NSStringCompareOptions.RegularExpressionSearch, range: nil)
println(newStr) //I run 26.4 miles
//or more simply
let newStr2 = "I run \(n) kilometers"
//yes, I know my conversion is off
关于regex - Swift:正则表达式捕获数字的数学运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26194700/