我希望用“米”替换我的字符串中的所有内容。问题是我必须找到正确的模式,因为单位符号前面的空格可以有一个数字。
我已经尝试了以下模式:[1-9][0-9]*\\s?m": "[1-9][0-9]*\\s?Meter
,代码如下:
static let patterns = [
"[1-9][0-9]*\\s?m": "[1-9][0-9]*\\s?Meter"
];
static public func prepareText(input: String) -> String {
var modifiedInput = input;
for pattern in patterns.keys {
let regex = try! NSRegularExpression(pattern: pattern, options: .caseInsensitive);
modifiedInput = regex.stringByReplacingMatches(
in: modifiedInput, options: [], range: NSMakeRange(0, modifiedInput.count),
withTemplate: patterns[pattern]!);
}
return modifiedInput;
}
但现在我遇到的问题是我的参数值也改变了:
800 m -> [1-9][0-9]*s?Meter
那么如何将800保持在单位符号前面?
答案 0 :(得分:1)
您需要使用
static let patterns = [
"([1-9][0-9]*\\s?)m": "$1Meter"
];
"([1-9][0-9]*\\s?)m"
模式将匹配并从第{1}组到1
,任意0位数,然后是可选空格,然后匹配9
,从第1组中捕获一个数字。 m
替换将替换为第1组的内容,然后添加$1Meter
。
如果您需要确保Meter
后面没有单词char,请在{{1}之后使用m
正则表达式(即添加"([1-9][0-9]*\\s?)m\\b"
,一个单词边界})。