Apply Superscript para todos os dígitos decimais que aparecem depois de uma certa string?

1

Suponha que eu tenha uma string no Microsoft Word 2016 assim:

道过存在Al2V3和Al50V50这两Al20种

Agora quero selecionar todos os dígitos decimais após Al like

e aplicar formatação Superscript a esses dígitos?

Acho que devo usar o recurso Localizar e substituir com o RegEx no Word, mas não consigo descobrir como implementar isso.

Alguma sugestão?

    
por yode 11.01.2017 / 16:15

2 respostas

0

Primeiro, quis basear a solução em regex. Escrever tal expressão não é grande coisa, mas Sobrescrito é uma propriedade. Não é possível substituir uma propriedade por outra usando regex. Em vez de RegExp.Replace, é possível usar RegExp.Execute, que localiza todas as ocorrências, mas esse método não salva informações sobre a posição e a duração de cada ocorrência.

Em vez de regex, usei apenas um loop para percorrer todo o texto. No início, o código identifica o que mudar e, no segundo loop, aplica as mudanças. Isso é feito de acordo com a referência msdn Pode haver apenas um Objeto de seleção por painel da janela do documento, e apenas um objeto Selection em todo o aplicativo pode estar ativo.

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
    
por 13.01.2017 / 14:22
0

Se você não quiser usar o VBA, é possível encontrar e substituir em dois estágios.

  1. Abra a caixa de diálogo Substituir e selecione "Mais > >" botão e ative curingas.
  2. Faça a substituição com Localizar, como Al([0-9]{1,}) e Substituir como Al++++ . Eu escolhi ++ como um delimitador porque quase certamente não aparece em seu documento, mas você pode usar praticamente qualquer coisa diferente.
  3. Mude Localizar O que para ++([0-9]{1,})++ e Substituir para . Com o cursor ainda na caixa Substituir, vá até o botão de menu "Formatar", selecione "Fonte ...", escolha "Sobrescrito" e confirme a caixa de diálogo. Então faça a substituição.

Os curingas do Word são muito estranhos se você estiver habituado a expressões regulares do Unix, Perl, JavaScript e outros.

  • Os parênteses agem como grupos de captura em expressões regulares tradicionais, e a substituição pode ter referências anteriores a eles ( para o primeiro grupo, para o segundo grupo, etc.).
  • Os colchetes só podem ter um intervalo de caracteres, não caracteres ou intervalos arbitrários.
  • O * age como nos curingas da linha de comando, não em expressões regulares, por isso não pode ser usado aqui.
  • A descrição de @ leva você a acreditar que é como uma expressão regular + , mas não é, por isso também não pode ser usada aqui.
  • Os colchetes encaracolados agem como chaves em uma expressão regular, para que possam ser usados aqui.
por 13.01.2017 / 18:56