Ricerca con caratteri jolly di Word 2010: trova il testo nel formato ABC.DEF.XYZ


3

Sto cercando di trovare testo in Word 2010 nel seguente formato: ABC.DEF.XYZ. Questo è essenzialmente trovare riferimenti a codice, usando la sintassi Java, scritti nel documento word. Si noti che un riferimento a 3 elementi è solo un esempio. I riferimenti effettivi hanno un minimo di 2 elementi e fino a 5 elementi.

Ho provato numerose combinazioni di caratteri jolly (e non jolly) per farlo funzionare, ma non ho avuto fortuna. Ecco alcune delle cose che ho provato:

  1. <([a-z0-9A-Z]@)>.<([a-z0-9A-Z]@)>
    NOTA, questo funziona effettivamente per trovare un riferimento a 2 elementi. È stato un colpo mancante quando è stato trovato il modello all'interno di una stringa più grande (ad es. Corrispondenza degli elementi 2 e 3 di un riferimento a 3 elementi)

  2. <([a-z0-9A-Z]@)>(.<([a-z0-9A-Z]@)>)@
    Fornisce un errore - modello non valido

  3. <([a-z0-9A-Z]@)>.<([a-z0-9A-Z]@)>.<([a-z0-9A-Z]@)>
    Richiede così tanto tempo che Word si blocca per oltre 15 minuti e non trova una singola corrispondenza (il documento contiene circa 150 pagine di testo, quindi forse era troppo per essere gestito)

  4. <([a-z0-9A-Z]@)>.<([a-z0-9A-Z]@)>.<([a-z0-9A-Z]@)>.<([a-z0-9A-Z]@)>
    Word si è effettivamente bloccato quando ho provato questo.

Idealmente, penso che una versione funzionante di # 2 sarebbe l'ideale - tuttavia, non so come rendere valido il modello.

Se ciò non fosse possibile, potrei semplicemente usare il n. 1 e sperare che riesca a catturare tutto (non sono sicuro del perché corrisponda a determinate stringhe e non ad altre).

Qualsiasi aiuto è molto apprezzato.

Risposte:


1

È possibile utilizzare il motore RegBA VBA di Word anziché la ricerca con caratteri jolly di Word.


Ok, il compito era trovare tutte le stringhe con il seguente schema

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

Il miglior modello che ho potuto creare è stato

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

che restituisce i seguenti risultati contrassegnati con il giallo

inserisci qui la descrizione dell'immagine

Spiegazione del modello

  • \wcorrisponde a un singolo personaggio di Az. Non distingue tra maiuscole e minuscole
  • \d corrisponde a una cifra 0-9
  • [\w\d]{3}partite 3 caratteri o cifre simili ABC, abc, 123, Ab1- ma non A$CoABCD
  • ([\w\d]{3}\.){1,4}corrisponde a 1,2,3 o 4 gruppi con un punto seguente \.. L'ultimo gruppo [\w\d]{3}non richiede un punto seguente

Macro VBA

Premi ALT+ F11per aprire l'editor VBA. Incolla il codice ovunque ed eseguilo conF5

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

Avvertimento

Come indicato in rosso sull'immagine di esempio, il motivo corrente presenta un difetto e corrisponde anche a sottostringhe di stringhe troppo lunghe. Ho giocato un po 'con \b, [^\.]e \sma non di loro ha lavorato per tutti i casi. Forse altri utenti possono trovare una soluzione valida?

Risorse usate


Ciao @nixda, grazie - questo è esattamente quello che stavo cercando. Giocherò con regex VBA e vedrò se riesco a trovare qualcosa di meglio.
zakaluka,

@zakaluka Un breve suggerimento per i test: wdYellowpassa a wdAutoper rimuovere i risultati evidenziati. Vorrei creare una seconda funzione per questo. E usa la finestra immediata (ctrl + G nell'editor VBA) insieme a debug.printper testare e visualizzare le cose
nixda,

0

Suggerirei di copiare il testo su Notepad ++, quindi di utilizzare l'opzione RegEx per apportare le modifiche.

So che sembra un dolore, ma una volta che ti ci abitui, puoi spostarti tra i programmi molto rapidamente.

RegEx è un'opzione nella finestra Trova / Sostituisci in Notepad ++. Altri editor hanno la stessa funzione.

Ivan


Ciao @ivanwalsh, grazie per il suggerimento. Tuttavia, ciò non è possibile perché Notepad ++ non mantiene la formattazione di Word (e riformattare un documento di 150 pagine non è realistico).
zakaluka,

Vedi cosa intendi. Sembra che avresti bisogno di eseguire una macro che utilizza regex ... in qualche modo. Spero che funzioni. Ivan
ivan walsh,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.