Vorrei prefazione questa affermando che sto lavorando con VB6 & RegExpRegExp espressione regolare trovare e sostituire parole intere solo
Sto tentando di trovare e sostituire parole intere, da "parole intere" intendo un la corrispondenza valida non è una sottostringa di un'altra parola, anche se alcuni caratteri speciali saranno ok. Sono un principiante alle espressioni regolari. Questo è quello che stavo cercando:
([^a-z]+)(Foo)([^a-z]+)
Sembra vicino ma ho qualche problema in determinate situazioni.
Per esempio, se trovo la stringa
Foo Foo
o
Foo(Foo)
o in qualsiasi punto di una linea termina con Foo e la seguente riga inizia con Foo
This is a line with Foo
Foo starts the next line
In ogni di questi casi viene abbinato solo il primo Foo.
Beh, forse non è un problema con la partita, ma piuttosto il mio metodo di sostituzione. Non so esattamente come posso verificarlo. Sto utilizzando gruppi di sostituire qualunque delimitazione char è compensata dalla espressione, in questo modo:
regEX.Replace(source, "$1" & newstring & "$3")
Quindi, in sintesi voglio evitare matching: FooBar barfoo
Una delle seguenti sarebbe valido gli incontri:
Foo Foo Foo
bar
foo_bar
foo.bar
Foo, bar
Foo (bar)
Foo (Foo)
Se qualcuno può gentilmente mi mostra il modo corretto di fare questo avrei molto grato!
modificati
Sembra ho parlato un po 'troppo presto per quanto riguarda la prima soluzione qui di seguito. Dopo un po 'di test e un po' di ulteriore lettura, vedo che il carattere di sottolineatura è una parola char e quindi il pattern sopra non lo abbinerà. Sono arrivato con questo che fa il trucco, c'è un modo migliore?
(\b)(Foo)(\b|_)
regEX.Replace(source, "$1" & newstring & "$3")
Funziona, ma sembra un po 'sciatto.
grande grazie. Ho così tanto da imparare sulle espressioni regolari. Dovevo fare un piccolo cambiamento, ma sembra aver fatto il trucco. Semplicemente \ bFoo \ b –
Beh, non era proprio perfetto. Ho modificato il mio post originale sopra. I commenti sono i benvenuti –
underscore è considerato un "carattere Word", quindi '\ b' non corrisponderà tra una lettera e un trattino basso. Lì * è * un modo per farlo però. Fammi sapere se vuoi che ti mostri – Bohemian