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.