원하는 패턴을 선택하는 코드를 작성하는 데 문제가 있습니다. 내가 가지고있는 .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에 표시된대로 (%) 또는 ($)와 같은 다른 문자는 무시할 수 있습니다.
소수점 이하 숫자와 함께 첫 번째 숫자 인스턴스를 선택할 수 있도록 패턴 문을 다시 작성하는 방법에 대한 제안이 있는지 물어보고 싶습니다.
미리 감사드립니다!
정규식이 표시 한 문자열과 일치하지 않습니다. 당신이 사용할 수있는
\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] 삭제
몇 마디 만하겠습니다