2017-12-05 3 views
1

私は 'メートル'で私の弦のすべてのmを置き換えたいです。問題は、ユニットシンボルの前のスペースを組み合わせて数字を持つことができるので、正しいパターンを見つけなければならないということです。することができ、どのようRegularExpressionsを使ってパターンに基づいたマッチを置き換えることができますが、その値は保持しますか?

800 m -> [1-9][0-9]*s?Meter 

:次のコードで[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を置いていますか?

答えて

1

あなたは

static let patterns = [ 
    "([1-9][0-9]*\\s?)m": "$1Meter" 
]; 

を使用する必要が"([1-9][0-9]*\\s?)m"パターンは、ちょうどmと一致し、任意の0+の数字と、その後、オプションの空白、1から9に、グループ1に数字と一致し、キャプチャします。 $1Meterの置換えはグループ1の内容に置き換えられ、次にMeterを追加します。

あなたは、mがワード文字で続いていないことを確認します(つまり、m後、ワード境界を\\bを追加)"([1-9][0-9]*\\s?)m\\b"正規表現を使用する必要がある場合。

+1

本当に有益な回答ありがとうございます!これは正しい方法です! –

関連する問題