2017-12-05 11 views
1

나는 '미터'로 모든 문자열을 내 문자열로 대체하려고합니다. 문제는 단위 기호 앞에 공백을 조합하여 숫자를 사용할 수 있기 때문에 정확한 패턴을 찾아야한다는 것입니다. 다음 코드 [1-9][0-9]*\\s?m": "[1-9][0-9]*\\s?Meter : RegularExpressions를 사용하여 패턴을 기반으로 한 일치 항목을 대체하지만 값을 유지하려면 어떻게해야합니까?

은 이미 다음과 같은 패턴을 시도

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을 유지합니까?

답변

1

당신은

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

"([1-9][0-9]*\\s?)m" 패턴은 어떤 0+ 자리하고 선택적인 공백 후 바로 m 일치 91에서 숫자와 일치하고 그룹 1에 캡처 사용해야합니다. $1Meter 대체품은 그룹 1의 내용으로 대체 된 다음 Meter을 추가합니다.

당신이 (m 후, \\b, 단어 경계를 추가, 즉)의 m이 단어의 문자와 다음에 있지 않은지 확인 "([1-9][0-9]*\\s?)m\\b" 정규식을 사용해야하는 경우.

+1

정말 도움이 된 답변에 감사드립니다 !! 이것은 올바른 방법입니다! –