특정 문자열 다음에 나타나는 모든 십진수에 위첨자를 적용 하시겠습니까?


1

Microsoft Word 2016에 다음과 같은 문자열이 있다고 가정하십시오.

道过存在Al2V3和Al50V50这两Al20种

이제 다음 Al과 같이 소수점 이하 자릿수를 모두 선택하고 싶습니다.

여기에 이미지 설명을 입력하십시오

해당 숫자에 위첨자 서식을 적용 하시겠습니까?

Word에서 RegEx로 찾기 및 바꾸기를 사용해야한다고 생각하지만 이것을 구현하는 방법을 알 수는 없습니다.

어떤 제안?


@ Ƭᴇcʜιᴇ007에서 "L"로 동일 "1" 타임즈 새로운 로마 에 그렇군 애도 내 영어 잘못된 documentation.You이 술어 링크 된 말씀이 이 일을 할 수 있지?
yode

사진에서 원하는 것처럼 여러 항목을 동시에 선택할 수 없으므로 전체 목표는 무엇입니까? 이 중 하나를 선택한 후에는 무엇을 하시겠습니까? 다른 텍스트로 모두 바꾸시겠습니까? 또는?
Ƭᴇcʜιᴇ007

@ Ƭᴇcʜιᴇ007 한 번에 위첨자가되도록 설정하고 싶습니다.
yode

1
이를 위해 Word의 RegEx를 사용할 때의 문제는 a) "찾기"는 항상 전체 찾기 패턴을 선택하고 b) 대체 패턴의 일부에만 위첨자와 같은 서식을 적용 할 수 없다는 것입니다. 나는 당신이 요구하는 것을하기 위해 VBA를 작성해야한다고 생각합니다.
Ƭᴇcʜιᴇ007

1
선택한 솔루션 (RegEx 찾기 및 바꾸기)과 관련하여 해결하려는 실제 문제 (자릿수 위 첨자)에 대한 질문을 업데이트했습니다. 이전 의견에서 말했듯 이이 작업을 수행 할 수 있지만 찾기 및 바꾸기가 수행 할 수 없으므로 요청한 사항을 수행하기 위해 VBA 매크로를 작성해야한다고 생각합니다. 어쩌면 다른 사람이 더 잘 알거나 매크로를 사용하여 도울 시간이 있습니다. :)
Ƭᴇcʜιᴇ007

답변:


0

처음에는 정규식을 기반으로 솔루션을 만들고 싶었습니다. 이러한 표현을 작성하는 것은 큰 문제가 아니지만 Superscript 는 속성입니다. 정규식을 사용하여 속성을 다른 속성으로 바꿀 수는 없습니다. RegExp.Replace 대신 모든 발생을 찾는 RegExp.Execute를 사용할 수 있지만이 방법은 각 발생의 위치와 길이에 대한 정보를 저장하지 않습니다.

정규 표현식 대신 전체 텍스트를 반복하기 위해 루프를 사용했습니다. 처음에는 코드가 변경 사항을 식별하고 두 번째 루프에서는 변경 사항을 적용합니다. 당 그래서 그것은 이루어집니다 MSDN 참조 " 문서 창 창 당 하나의 Selection 개체, 전체 응용 프로그램에서 하나의 Selection 개체 활성화 될 수있을 수 있습니다. "

Option Explicit
Sub toSuperscript()
    Dim al As String
    Dim alPosition As Integer
    Dim alOcc As String 'Al occurence
    Dim strTemp As String
    Dim strTemp_len As Integer
    Dim counter As Integer
    Dim subCounter As Integer
    Dim c As New Collection 'start
    Dim c1 As New Collection 'length

    al = "Al" 'the searched string
    ActiveDocument.Select
    strTemp = Selection.Text
    strTemp_len = Len(strTemp)

    'search for Al
    For counter = 1 To strTemp_len
        alOcc = Mid(strTemp, counter, 2) '2 as Al is characters long
        If StrComp(CStr(alOcc), CStr(al), vbBinaryCompare) = 0 Then
            subCounter = 0
            Do Until IsNumeric(Mid(strTemp, counter + 2, subCounter + 1)) = False
                subCounter = subCounter + 1
            Loop
                c.Add CStr(counter + 2) 'start
                c1.Add CStr(subCounter) 'length
        End If
    Next counter

    'Apply superscript
    For counter = 1 To c.Count
         ActiveDocument.Range(Start:=c.Item(counter) - 1, End:=CInt(c.Item(counter)) + CInt(c1.Item(counter)) - 1).Font.superscript = True
    Next counter
    Application.Selection.StartOf 'Put the cursor at the beginning of the document (optional)
End Sub

0

VBA를 사용하지 않으려면 2 단계 찾기 및 바꾸기를 수행하면됩니다.

  1. 바꾸기 대화 상자를 열고 "추가 >>"단추를 선택한 다음 와일드 카드를 켜십시오.
  2. 다음으로 찾기 Al([0-9]{1,})및 바꾸기를 사용하여 교체를 수행하십시오 Al++\1++. 필자는 ++문서에 거의 나타나지 않기 때문에 구분 기호로 선택 했지만 거의 다른 것을 사용할 수 있습니다.
  3. 바꿀 내용 찾기 ++([0-9]{1,})++및로 변경 하십시오 \1. 커서를 바꾸기 상자에 그대로 둔 상태에서 "서식"메뉴 버튼으로 이동하여 "글꼴 ..."을 선택하고 "위 첨자"를 선택한 다음 대화 상자를 확인하십시오. 그런 다음 교체하십시오.

Unix, Perl, JavaScript 등의 정규 표현식에 익숙하다면 Word의 와일드 카드는 매우 이상합니다.

  • 괄호는 일반적인 정규 표현식에서 캡처 그룹처럼 작동하며 대체는 \1해당 그룹에 \2대한 역 참조를 가질 수 있습니다 ( 첫 번째 그룹, 두 번째 그룹 등).
  • 대괄호는 임의의 문자 나 범위가 아닌 문자 범위 만 가질 수 있습니다.
  • *는 명령 줄에서와 같은 행위는하지 정규 표현식을 와일드 카드 때문에 여기에 사용할 수 없습니다.
  • 에 대한 설명은 @정규 표현식과 같다고 믿지 +않지만 여기서는 사용할 수 없습니다.
  • 중괄호는 정규 표현식에서 중괄호처럼 작동하므로 여기에서 사용할 수 있습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.