2016-12-19 1 views
0

RegexExtract를 사용하여 텍스트에서 숫자 값을 추출합니다. 아래 링크에서 다음 정규 표현식 [0-9]+(\.[0-9][0-9]?)?을 사용했지만 소수점 이하 두 개의 값만 추출하는 것으로 나타났습니다. 나는 그 앞에 숫자가 필요하다. 왜 작동하지 않는지 확실하지 않습니다. 나는 그것의 다른 변이를 또한 시도했다.Regex - 문자열에서 숫자 2 자릿수를 추출합니다.

Simple regular expression for a decimal with a precision of 2

내가로부터 당겨 오전 텍스트는 항상 같은 길이 아닌 약 100 자 함께입니다. 텍스트에서 나는 수치를 당길 필요가있는 다음은 만 (X.XX) : 도 (Gmax) = 2.3428

ThisWorkbook.Worksheets(Warn.MachBox.Value & "_C1").Range("B" & Duncan2 + 1).Value = RegexExtract(ThisWorkbook.Worksheets(Warn.MachBox.Value & "_C1").Range("C" & Duncan2 + 1).Value, "Gmax = [0-9]+(\.[0-9][0-9]?)?")

내가 가지고있는 현재의 방법과 내가 시도한 다른 유사 소수점 앞의 값을 제외하고는 0.34 만 반환합니다. 나는 2.34가 필요하다.

모든 의견을 크게 환영합니다. 감사!

편집 : RegexExtract 함수 정보를 추가하지 않았습니다. 이 작업은 아래의 링크에서 발견되었다 : How to extract text within a string of text

답변

4

내가 사용합니다 :

(\d+)(?:\.(\d{1,2}))? 

설명 :이 일치의 일환으로 당신에게 점을주지 않을 것으로

(   # First matching group 
\d   # A digit (shorthand for [0-9]) 
    +  # Any number of times 
) 
(?:   # A non-matching group 
    \.  # A literal dot 
    (  # Second matching group 
    \d  # A digit 
     {1,2} # 1 or 2 times (shorthand for \d\d? or [0-9][0-9]?) 
    ) 
)?   # The decimal part is optional 

주 그룹이 될 수 있습니다. 이는 후 처리에서 더 쉬울 것입니다. 그렇지 않은 경우 일치하지 않는 그룹을 제거하고 두 번째 일치 그룹에 점을 넣을 수 있습니다.

원하는 결과를 얻지 못하면 정규 표현식 라이브러리를 호출하는 방법에 문제가있을 가능성이 큽니다.

+0

(\ d +) (? : \. (\ d {1,2}))를 시도 했습니까? 2, 34를 반환했습니다. 다른 제안을 시도했지만 제대로 수정하지 않았습니다 (\ d +) (\. \ d {1,2})? 2, 0.34를 반환했습니다. – jmeddy

+0

@jmeddy 네, 그게 맞고 내가 쓴 것을 확인해줍니다. 점과 일치 시키길 원하는지 선택할 수 있습니다. – Keelan

+0

감사합니다, 카밀. 2와 .34 사이에 쉼표와 공백이있는 이유는 무엇입니까? 도움을 주셔서 감사합니다, 난 정규식을 사용하는 새로운입니다. – jmeddy

0
^-?\d+(\.\d{1,2})?$ 

이 정규식이 음수와 양수입니다. 이 정규식을 텍스트와 일치 시키려면^$을 제거해야합니다.

{1,2} 옵션은 십진수의 정밀도를 나타냅니다. 문제를 들어이 옵션을 사용할 수 있습니다 : {2}

+0

안녕 Mattasse, 응답 주셔서 감사합니다. 이것은 나를 위해 동일한 결과를 제공하고 소수점 앞의 값을 포함하지 않습니다. 작동하는 것처럼 보이지만 일부에서는 그렇지 않습니다. 어쩌면 내가 여기에서 잘못하고있는 다른 것입니다 ... – jmeddy

관련 문제