Word 2010 와일드카드 검색 - ABC.DEF.XYZ 형식의 텍스트 찾기

Word 2010 와일드카드 검색 - ABC.DEF.XYZ 형식의 텍스트 찾기

Word 2010에서 ABC.DEF.XYZ 형식의 텍스트를 찾으려고 합니다. 이는 본질적으로 Java 구문을 사용하여 document라는 단어에 기록된 코드 참조를 찾는 것입니다. 3개 요소 참조는 단지 예일 뿐입니다. 실제 참조에는 최소 2개 요소와 최대 5개 요소가 있습니다.

나는 이것을 작동시키기 위해 수많은 와일드카드(및 와일드카드가 아닌) 조합을 시도했지만 운이 없었습니다. 제가 시도한 몇 가지 사항은 다음과 같습니다.

  1. <([a-z0-9A-Z]@)>.<([a-z0-9A-Z]@)>
    참고, 이는 실제로 2요소 참조를 찾는 데 작동합니다. 더 큰 문자열 내에서 패턴을 찾을 때 적중 또는 실패가 발생했습니다(예: 3개 요소 참조의 요소 2와 3 일치).

  2. <([a-z0-9A-Z]@)>(.<([a-z0-9A-Z]@)>)@
    오류 발생 - 잘못된 패턴

  3. <([a-z0-9A-Z]@)>.<([a-z0-9A-Z]@)>.<([a-z0-9A-Z]@)>
    실행하는 데 시간이 너무 오래 걸려서 Word가 15분 넘게 중단되었고 일치하는 항목을 하나도 찾지 못했습니다. (문서는 약 150페이지의 텍스트이므로 처리하기에는 너무 많았을 수 있습니다.)

  4. <([a-z0-9A-Z]@)>.<([a-z0-9A-Z]@)>.<([a-z0-9A-Z]@)>.<([a-z0-9A-Z]@)>
    내가 이것을 시도했을 때 실제로 Word가 충돌했습니다.

이상적으로는 #2의 작업 버전이 이상적이라고 생각합니다. 그러나 패턴을 유효하게 만드는 방법을 모르겠습니다.

이것이 가능하지 않다면 #1을 사용하여 모든 것을 포착할 수 있기를 바랍니다(왜 특정 문자열과 일치하고 다른 문자열과 일치하지 않는지 잘 모르겠습니다).

어떤 도움이라도 대단히 감사하겠습니다.

답변1

Word의 와일드카드 검색 대신 Word의 VBA RegEx 엔진을 사용할 수 있습니다.


좋아, 작업은 다음 패턴을 가진 모든 문자열을 찾는 것이었습니다

###.###  
###.###.###
###.###.###.###
###.###.###.###.###

내가 만들 수 있는 최고의 패턴은

([\w\d]{3}\.){1,4}[\w\d]{3}

노란색으로 표시된 다음 히트를 반환합니다.

여기에 이미지 설명을 입력하세요

패턴 설명

  • \wAz의 단일 문자와 일치합니다. 대소문자를 구분하지 않습니다.
  • \d숫자 0-9와 일치
  • [\w\d]{3}ABC, abc, 123, Ab1- 같은 문자나 숫자 3개와 일치 하지만 A$C또는 일치하지 않음ABCD
  • ([\w\d]{3}\.){1,4}다음 포인트가 있는 1,2,3 또는 4개의 그룹과 일치합니다 \.. 마지막 그룹은 [\w\d]{3}다음 사항을 요구하지 않습니다.

VBA 매크로

ALT+를 눌러 F11VBA 편집기를 엽니다. 코드를 아무데나 붙여넣고 실행하세요.F5

Sub RegExMark()

    Dim RegEx As Object
    Set RegEx = CreateObject("VBScript.RegExp")

    RegEx.Global = True
    RegEx.Pattern = "([\w\d]{3}\.){1,4}[\w\d]{3}"

    Set Matches = RegEx.Execute(ActiveDocument.Range)
    For Each hit In Matches
       Debug.Print hit
       ActiveDocument.Range(hit.FirstIndex, hit.FirstIndex + hit.Length). _
         HighlightColorIndex = wdYellow
    Next hit

End Sub

경고

예제 이미지에 빨간색으로 표시된 것처럼 현재 패턴에는 결함이 있으며 너무 긴 문자열의 하위 문자열도 일치합니다. 나는 를 조금 가지고 놀았 \b지만 그 중 모든 경우에 효과가 있는 것은 아닙니다. 다른 사용자가 유효한 솔루션을 찾을 수 있을까요?[^\.]\s

사용된 자원

답변2

텍스트를 Notepad++에 복사한 다음 RegEx 옵션을 사용하여 변경하는 것이 좋습니다.

고통스럽게 들리겠지만 일단 익숙해지면 매우 빠르게 프로그램 사이를 이동할 수 있습니다.

RegEx는 Notepad++의 찾기/바꾸기 창에 있는 옵션입니다. 다른 편집기에도 동일한 기능이 있습니다.

이반

답변3

단어에서 범위 개체의 찾기 메서드를 사용해야 하는 경우 매번 다음 검색 와일드카드 중 하나를 사용하여 텍스트를 여러 번 실행해야 한다고 생각합니다.

  1. [!.a-z0-9A-Z]([a-z0-9A-Z]@).([a-z0-9A-Z]@)[!.a-z0-9A-Z]

  2. [!.a-z0-9A-Z]([a-z0-9A-Z]@).([a-z0-9A-Z]@)[.][!a-z0-9A-Z]

  3. [!.a-z0-9A-Z]([a-z0-9A-Z]@).([a-z0-9A-Z]@).([a-z0-9A-Z]@)[ !.a-z0-9A-Z]

  4. [!.a-z0-9A-Z]([a-z0-9A-Z]@).([a-z0-9A-Z]@).([a-z0-9A-Z]@)[ .][!a-z0-9A-Z]

  5. [!.a-z0-9A-Z]([a-z0-9A-Z]@).([a-z0-9A-Z]@).([a-z0-9A-Z]@). ([a-z0-9A-Z]@) [!.a-z0-9A-Z]

  6. [!.a-z0-9A-Z]([a-z0-9A-Z]@).([a-z0-9A-Z]@).([a-z0-9A-Z]@). ([a-z0-9A-Z]@)[.][!a-z0-9A-Z]

  7. [!.a-z0-9A-Z]([a-z0-9A-Z]@).([a-z0-9A-Z]@).([a-z0-9A-Z]@). ([a-z0-9A-Z]@).([a-z0-9A-Z]@)[!.a-z0-9A-Z]

  8. [!.a-z0-9A-Z]([a-z0-9A-Z]@).([a-z0-9A-Z]@).([a-z0-9A-Z]@). ([a-z0-9A-Z]@).([a-z0-9A-Z]@)[.][!a-z0-9A-Z]

각 그룹의 첫 번째는 마침표가 없거나 영숫자가 뒤에 오는 ver #을 찾습니다. 두 번째는 문장 끝과 같은 마침표로 끝나는 ver#을 찾습니다.

이러한 와일드카드는 버전 # 앞의 문자부터 버전 # 뒤의 2개 문자까지 선택 항목을 찾습니다. 그러나 하위 그룹은 추출되어 할당됩니다.

와일드카드와 함께 사용되는 단어의 찾기 방법을 사용하는 데에는 두 가지 문제가 있습니다. 하나는 단어에 특정 문자나 그룹을 0개 이상 지정하는 방법이 없다는 것입니다. 이는 정규식 함수로 처리할 수 있는 몇 가지 쉬운 일치 방법을 제거합니다.

두 번째 문제는 ver # 내의 마침표가 단어의 끝처럼 보이므로 꺾쇠 괄호가 와일드카드에서 마침표를 사용하는 것과 중복된다는 것입니다. 꺾쇠 괄호는 외부에서도 사용하면 안 됩니다. 하위 그룹 수가 적은 ver #이 하위 그룹 수가 많은 문자열 내에서 발견되면 잘못된 일치가 발생하기 때문입니다.

또한 "찾기"를 실행한 다음 "교체"를 실행하는 경우 "찾기" 실행에서 반환된 선택 항목의 끝이 문서의 끝과 같도록 변경해야 한다는 점을 추가해야 합니다(이전에 이 값을 저장해 두셨기를 바랍니다). . 이는 선택 항목이 "찾기" 텍스트와 동일한 경우 바꾸기 명령이 일치하는 선택 항목을 다시 찾지 않기 때문입니다. 나는 이것이 와일드카드가 아닌 찾기/바꾸기에 해당된다는 것을 알고 있습니다. 후회하는 것보다 안전한 것이 낫습니다.

관련 정보