Quali termini nel mio regex dovrei usare al posto di / b per non essere soggetto a interferenze da parte dei caratteri di controllo in MS Word o nei suoi fratelli?


0

Sto usando Dynamic Hotstrings come parte della mia implementazione di AutoHotkey . È stato uno strumento prezioso per l'apprendimento delle espressioni regolari.

Attualmente lo uso pesantemente per l'espansione del testo all'interno dei miei processi quotidiani in ufficio. Tuttavia, ho problemi con il software di elaborazione testi quando si utilizza la formattazione del testo. Nel caso in cui in grassetto, corsivo o altrimenti fornissi una modifica al formato all'inizio di una stringa che altrimenti si espanderebbe, non si espanderà perché il carattere di controllo fa parte della stringa. Ho usato \ b come switch iniziale nel mio regex.

Sto cercando di vedere se esiste una scorciatoia nel mondo regex per rendere conto di questo tipo di personaggi senza elencarli a mano. Tale esiste?

In caso contrario, esiste un utile riferimento di tutti i caratteri di controllo di cui dovrei tenere conto in MS Word?

Grazie per il tuo tempo.


2
Potresti dare un esempio concreto di ciò che stai cercando di fare?
m4573r,

Ho questo: hotstrings("\boic"tailchar,"Officer in Charge (OIC)%$1%")che prende il testo "oic" e lo espande anche qui. Naturalmente l'espressione "vede" anche il ctrl-b se dovessi digitare lo stesso nell'elaboratore di testi in grassetto. tailcharè semplicemente una variabile che contiene tutti i caratteri che vorrei indicare e terminare con la stringa.
EFH,

Aggiornato il collegamento alla versione più recente della libreria.
EFH,

Risposte:


1

Con l'esempio che hai fornito nei commenti, ti consiglio di rimuoverlo \ball'inizio. Ovviamente non è ottimale e potrebbe innescare l'espansione quando non lo si desidera, ma con quale frequenza si digitano comunque le parole che terminano con "oic"?

Una soluzione più elegante sarebbe quella di avere qualcosa del genere:

hotstrings("([^a-zA-Z])oic"tailchar,"%$1%Officer in Charge (OIC)%$2%")

Ma sfortunatamente non posso provarlo poiché non riesco a far funzionare DynamicHotstring: /


Mi piace aggiungere il negativo sul davanti. È un approccio che esplorerò.
EFH,

Stavo guardando le mie domande passate e mi sono imbattuto in questa domanda viziata. Immagino che qualcosa di brillante abbia attirato la mia attenzione. Ho preso la tua idea e l'ho trasformata in un'operazione retrospettiva per non dover passare% 1%. Questo è quello che ho provato e trovato il successo con per l'esempio dato: hotstrings("(?<=[^a-zA-z])oic"tailchar,"Officer in Charge (OIC)%$1%"). Funziona in grassetto, commenterò ulteriormente se cadrà a pezzi in pratica. Potrei finire per fare un 'trova e sostituisci' all'ingrosso!
EFH,

Aggiornato alla nuova versione della libreria. Questa correzione non funziona più.
EFH,

@EFH Funziona se cambi semplicemente regex in "oic"? Come in, la libreria funziona affatto? Inoltre, se prima funzionasse per te, non c'è alcun motivo reale per l'aggiornamento, terrei solo la vecchia versione.
m4573r,

La biblioteca funziona in entrambe le forme. Vecchio e nuovo. Il nuovo è meno buggy e meglio adattato agli ambienti di lavoro oggi rispetto a circa 4 anni fa. Il problema in Word con l'espansione del testo non riesce immediatamente dopo un cambio di stile avviato da una sequenza di tasti è minore. Sebbene sperassi di trovare una semplice supervisione da parte mia, non è qualcosa che soffrirò molto per non aver risolto. Ho una domanda nel forum dell'attuale manutentore di questo script. Vedrò se questo mi darà frutti. Ieri ho trascorso gran parte della giornata esplorando regex. Non è affatto una perdita!
EFH,

0

Le espressioni regolari possono gestire solo ciò che le hai impostato. Non presumono che tu abbia caratteri in grassetto o qualche altro tipo di carattere di formattazione. Dovrai includere questi personaggi nella tua espressione regolare se intendi catturarli.

Esempio:

/\bsomething\b/

Rendere audace opzionale su entrambe le estremità:

/\b\u0002*something\u0002*\b/

Vorrei vedere se c'è un modo per eliminarli nel programma che stai usando. L'unico modo in cui sarai in grado di evitare di dover usare i personaggi stessi è se il programma li spoglia prima di provare a far corrispondere l'espressione regolare.


Cercherò come sono codificati i caratteri invisibili in MS Word e li aggiungerò alla regex. Grazie. Volevo essere sicuro che non mi mancasse qualcosa di ovvio e facile da impiegare prima di iniziare a elencare i caratteri invisibili in una variabile.
EFH,
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.