VBA RegEx : 숫자의 첫 번째 인스턴스를 찾고 다른 모든 문자를 무시하는 방법은 무엇입니까?

다리아 입

원하는 패턴을 선택하는 코드를 작성하는 데 문제가 있습니다. 내가 가지고있는 .txt 파일에서 5 개월 이라는 단어 뒤에 나오는 첫 번째 숫자를 파악하고 싶습니다. 다른 문자 AZ, 괄호, $, % 등이 있으면 무시하고 싶습니다. INVALID PROCEDURE CALL OR ARGUMENT 와 같은 VBA 오류 코드가 계속 나타납니다 .

현재 다음과 같은 코드가 있습니다.

Dim reg4 As Object: Set reg4 = CreateObject("vbscript.regexp")
 reg4.Pattern = "5 Months\s*([\d+]\.[\d+])\s*"
   Dim MCS As Object
    Set MCS = reg4.Execute(myText)
    **Dim Months5 As String: Months5 = MCS(0).submatches(0)** *the error stems from this line*

여기서 mytext 는 텍스트 파일의 내용으로 구성된 문자열입니다. 내 주요 문제는이 텍스트 파일이 항상 표준화 된 형식이 아니므로 "5 개월"이후의 첫 번째 숫자를 추출하려는 경우 오류가 발생한다는 것입니다.

텍스트 파일은 다음과 같습니다.

예 1

5 개월

($) (%) (월) (%) (%) (%) ($) (월)

0.00 0.0000 0.000

또는 예 2

5 개월

0.00

0.000

0.000

두 경우 모두 첫 번째 숫자 "0.00"을 전체 형식으로 추출 할 수 있으며 예제 1에 표시된대로 (%) 또는 ($)와 같은 다른 문자는 무시할 수 있습니다.

소수점 이하 숫자와 함께 첫 번째 숫자 인스턴스를 선택할 수 있도록 패턴 문을 다시 작성하는 방법에 대한 제안이 있는지 물어보고 싶습니다.

미리 감사드립니다!

Wiktor Stribiżew

정규식이 표시 한 문자열과 일치하지 않습니다. 당신이 사용할 수있는

\b5 Months[\s\S]*?(\d+(?:\.\d+)?)

regex 데모를 참조하십시오 . 세부:

  • \b -단어 경계
  • 5 Months -리터럴 텍스트
  • [\s\S]*? -가능한 한 적은 0 개 이상의 문자
  • (\d+(?:\.\d+)?)-캡처 그룹 1 : 하나 이상의 숫자 뒤에 a .및 하나 이상의 숫자 의 선택적 시퀀스가 ​​뒤 따릅니다 .

VBA에서 테스트 실행 :

Sub TestFn()
Dim reg4 As Object: Set reg4 = CreateObject("vbscript.regexp")
 reg4.Pattern = "\b5 Months[\s\S]*?(\d+(?:\.\d+)?)"
Dim myText As String
 myText = "5 Months" & vbCrLf & vbCrLf & "0.00"
Dim MCS As Object
Set MCS = reg4.Execute(myText)
Dim Months5 As String: Months5 = MCS(0).SubMatches(0)
Debug.Print (Months5)
End Sub

여기에 이미지 설명 입력

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관