regex - Swift:正则表达式捕获数字的数学运算

标签 regex swift capture

我喜欢使用正则表达式将“我跑了 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/

相关文章:

ios - 如何快速修复 URLQueryItem

Python捕获组并用正则表达式引用它

c# - WinForms - 在控制之前捕获键

regex - 如何使用正则表达式在日志文件中查找日期时间模式

python - 正则表达式获取括号外的所有文本

ios - Xcode错误: Failed to set () user defined inspected property: this class is not key value coding-compliant for the key

regex - 使用 Perl 替换运算符保留捕获

java - Java 中基于正则表达式的字符串拆分

正则表达式 - 捕获两个数字,确保第二个数字更大

ios - 出现键盘并查看滚动到顶部