Excel 2016(VBA)에서 정규식을 사용하여 매크로 내에 함수가 있습니다. 이 함수는 기본적으로 알파벳 문자로만 끝나도록 텍스트에서 모든 숫자를 제거해야 합니다. 문제는 이 숫자가 단순한 숫자가 아니라 로마 숫자일 수도 있다는 것입니다(로마 숫자 1부터 4까지, 즉 I, II, III 및 IV만 포함). 예를 들어 다음과 같은 가능한 항목 목록을 살펴보겠습니다.
Program Manager 3
Systems Engineer 3
Secretary III 12345
Consultant
IT Instructor 3
Computer Operations Manager 1
User Support Specialist 2
Engineering Tech II 12345
IT Instructor 2
Network Tech 3
내 함수는 다음 VBA 정규식 코드를 사용하여 숫자와 로마 숫자를 바꿉니다(이 시점에서는 트리밍이나 다른 것에 대해 걱정하지 않습니다).
Public Function RemoveNumbers(Txt As String) As String
With CreateObject("VBScript.RegExp")
.Global = True
.IgnoreCase = True
.Pattern = "[0-9]|\s[i]+|\s[iv]$"
RemoveNumbers = .Replace(Txt, "")
End With
End Function
일반적으로 한 가지 문제가 발생한 것을 제외하면 괜찮습니다. 내 RegEx가 문구를 잘못 변경했습니다.IT 강사 2그리고 그것을IT강사(공백과 단어 때문에강사, 로 시작하는나로마숫자 1과 같습니다.) 나는 온라인에서 답변을 찾으려고 노력했으며 RegEx가 문구를 제외하도록 많은 변형을 테스트했습니다.강사검색했지만 제대로 작동하지 않습니다. 내가 사용하려고 시도한 패턴 중 일부는 다음과 같습니다.
.Pattern = "\b(!Instructor)\b|[0-9]|\s[i]+|\s[iv]$"
.Pattern = "\b(!Instructor)\b\w+|[0-9]|\s[i]+|\s[iv]$"
.Pattern = "(!Instructor\b)|[0-9]|\s[i]+|\s[iv]$"
...etc
그리고 로마 숫자 1(I)을 제거해야 하므로 다음 방법을 해결 방법으로 사용할 수 없습니다.
.Pattern = "[0-9]|\s[i]{2,}|\s[iv]$"
Excel 2016 VBA 정규식을 사용하여 문자열(예: 강사)을 검색의 일부에서 제외할 수 있습니까? 그렇다면 누군가 VBA RegEx 중에 항목을 제외하는 방법에 대한 올바른 방향을 알려줄 수 있습니까?
감사해요
답변1
나는 그것을 알아. 다음 구문은 나에게 효과적입니다(많은 시행착오).
.Pattern = "\b(?!(?:Instructor)\b)(?:[0-9]+|\s[i]+|\s[iv]$)\b"
-- 아래 세부정보를 추가하도록 편집됨 --
추가 단어를 추가했습니다(예:정보) RegEx 제외:
"\b(?!(?:Info|Instructor)\b)(?:[0-9]+|\s[i]+|\s[iv]$)\b"
패턴의 세부사항:
- \b - 단어 경계 설정
- (?!(?:Info|Instructor)\b) - 뒤에 오는 단어에 대해 0개 또는 1개의(?) 제외(!)가 있습니다. 캡처하지 않는 그룹은 우리가 원하지 않기 때문입니다. 끝에 있는 \b는 단어 경계입니다.
- (?:[0-9]+|\s[i]+|\s[iv]$) - 하나 이상의 0 - 9 숫자를 일치시킵니다. 하나 이상의 i 문자가 뒤에 오는 공백(\s)과 일치합니다. 공백 다음에 iv가 일치합니다($는 끝에 검색을 나타냄).
- | = OR(전체적으로 사용됨)
- \b - 후행 단어 경계
-- 편집됨 왜냐하면 궁극적으로 이것이 나에게 가장 효과적이었기 때문입니다 --
.Pattern = "\b(?:[0-9]+|\s[i]+|\s[iv]+$)\b"