나는 일부 사용자 데이터 항목을 조작하는 데 사용한 기본 자바스크립트 정규식에 대한 제한된 경험을 가지고 있습니다. 그런데 지금 MS Word 2010 문서를 조작하는 것에 대해 질문을 받았습니다.
특히 내 사용자는 다음과 같은 긴 숫자 데이터 목록을 얻습니다.
1. blah blah 'car' blah blah
2. blah blah 'truck' blah blah
3. blah blah 'boat' blah blah
이것은 형식이 지정되지 않은 일반 단어 문서입니다. 그들은 작은따옴표로 묶인 항목을 기반으로 각 숫자 뒤에 형식이 지정된 헤더를 원합니다.
1. CAR: blah blah 'car' blah blah
2. TRUCK: blah blah 'truck' blah blah
3. BOAT: blah blah 'boat' blah blah
현재 이러한 변경을 수동으로 수행하는 전사 담당자가 있습니다(때때로 실수가 있음). javascript/jQuery를 사용하면 이 데이터를 가져오고, 따옴표로 묶인 단어를 검색하고, 일치 항목 앞에 가장 가까운 숫자를 찾고, 마침표 뒤에 모두 대문자 버전을 삽입하는 코드를 작성할 수 있습니다.
하지만 저는 Word에서 비슷한 기능을 사용해본 경험이 많지 않습니다. 매크로나 일부 유형의 스크립팅을 통해 이를 수행할 수 있습니까? 내 javascript/jQuery 코드를 작성하고 이를 Word 인스턴스에서 실행하는 것이 가능합니까?
안내해주셔서 감사합니다!
답변1
예! Microsoft Office VBA는 기본적으로 정규식 검색을 지원합니다. Regex 코드를 넣으려는 각 , 등의 파일 .docm
에 대해 VBA 편집기에서 "Microsoft VBScript Regular Expressions 5.5"를 참조로 추가해야 합니다 ..xlsm
이 정규식 모듈의 개체 모델 대부분은 MSDN에서 찾을 수 있습니다.여기. 누락된 것으로 보이는 한 가지는 설정입니다 MultiLine
.
다음과 같이 사용합니다:
- 다음을 사용하여 새 정규식 개체를 인스턴스화합니다.
Dim rx as New RegExp
- 원하는 대로
rx.Global
,rx.MultiLine
및 플래그를 설정합니다.rx.IgnoreCase
- 적절한 패턴 문자열을 할당하여 패턴을 정의합니다.
rx.Pattern
- 정규식과 일치하는 항목이 있는지 알고 싶다면 를 사용하세요.
rx.Test(str)
이는True
또는False
적절하게 반환됩니다. - 호출하면 0개 이상의 객체 로 구성된 0 기반의 1차원 배열처럼 동작하는 객체가
rx.Execute(str)
반환됩니다.MatchCollection
Match
Match
객체는FirstIndex
,Length
,Value
및SubMatches
속성을 노출합니다.FirstIndex
str
일치 항목이 발견된 위치의 첫 번째 문자에 대한 0부터 시작하는 인덱스입니다.Length
일치하는 부분의 길이입니다.str
Value
일치하는 문자열 결과입니다SubMatches
0부터 시작하는 배열입니다.하위 일치 그룹전체 경기 내에서- 불행하게도 Office VBA 정규식은 Python과 같은 명명된 그룹을 지원하지 않으므로 관심 있는 패턴 부분과 그룹 인덱스를 일치시키는 데 약간의 시행착오가 필요할 수 있습니다.
sed
나는 -style 교체 작업을 수행하는 방법이 있다고 생각하지 않습니다. 이는 검색 전용 기능입니다. 그러나 주변 VBA를 사용하여 원하는 대로 결과를 조작하는 것은 충분히 쉽습니다.
답변2
단어 문서의 일반 텍스트이고 그다지 크지 않고 jquery에 익숙하다면 단어 문서를 복사/붙여넣고 필요한 변경을 수행하고 변환된 단어를 다운로드할 수 있는 간단한 사이트를 만들 수 있습니다. 원하는 텍스트를 문서화하거나 출력합니다. 이것이 좋은 해결책인지 여부는 상황에 대한 자세한 내용에 따라 달라집니다.
매크로도 수행할 수 있지만 사용자 수에 따라 사용자에게 배포하기 어려울 수 있습니다.
답변3
VBA 또는 Python 스크립팅에 능숙하지 않고 @hBy2Py의 답변 아이디어가 귀하의 역량에 맞지 않는 경우 알고리즘을 구현하는 GoogleSheets/Excel을 사용하여 해결 방법을 시도해 보십시오.
- upload=형식이 없는 일반 word=txt 문서를 G'Sheet로 가져옵니다. 귀하의 목록이 A열에 있다고 가정해 보겠습니다.
- B 열에서 따옴표 안의 단어에 대해 REGEXEXTRACT를 사용하고 해당 단어를 대문자로 만드는 모든 열에 대한 중첩 수식을 작성합니다.
=ARRAYFORMULA(UPPER(REGEXEXTRACT(A:A;"\'([a-z]+)")))
- ...또는 별도의 C 열을 만들어 해당 단어를 대문자로 만듭니다.
=UPPER(B:B)
- C열(또는 D열)에서 새 목록을 CAPS 단어와 결합합니다(예를 들어 분할/연결 또는 그냥 사용하는 등 여러 가지 방법이 있습니다).
=ARRAYFORMULA(REGEXREPLACE(A:A;"\.(\s)";". "&B:B&": "))
TLDR:
=ARRAYFORMULA(REGEXREPLACE(A:A;"\.(\s)";". "&UPPER(REGEXEXTRACT(A:A;"\'([a-z]+)"))&": "))
다른 해결 방법은 여기에 설명된 솔루션을 사용하는 것입니다.와일드카드/정규식을 사용하여 Notepad++에서 찾기 및 바꾸기