Risposte:
\b(?:(T)|t)own(s?)\b
→ (?1:\u)village$2
(E deseleziona ignora caso nella finestra di dialogo)
\b
= limite di parole(?:)
= gruppo non acquisito(?1:\u)
= se il gruppo acquisito 1 converte il carattere successivo in maiuscolowww.
però)!
Sono sulla mia macchina di lavoro in questo momento, quindi nessun TextMate qui per me su cui testare, ma penso che questo potrebbe fare quello che vuoi:
Find: \b(T)?((?<!T)t)?(?<! )own(s)?\b
Replace: (?1:Village)(?2:village)$3
(Assicurati di deselezionare prima "Ignora caso".)
Spiegazione:
Il modello 'Trova' cerca le lettere own
precedute da a T
o a t
, quindi le cattura in $1
e $2
rispettivamente. L' (?<!T)
interno della seconda cattura si assicura che non si ottengano entrambi allo stesso tempo (come Tt
insieme), per quanto improbabile sia probabilmente, e il (?<! )
bit significa che own
non può essere preceduto da uno spazio - questo dovrebbe impedirlo dall'abbinare la parola own
da sola. L'una \b
o l'altra parte significa che dovrebbe corrispondere solo all'intera parola (altrimenti corrisponderà a cose come townies
e chown
). Infine, la (s)?
parte acquisisce un finale s
(se esiste) in $3
.
Il modello di sostituzione utilizza inserimenti condizionali per determinare con cosa sostituire il testo. Nello pseudo-codice la stringa di sostituzione dice sostanzialmente:
if (the first capture [T] exists) { replace the text by the word Village }
if (the second capture [t] exists) { replace the text by the word village }
(E poi aggiunge $3
, che sarà vuoto o conterrà un s
)
È brutto, ma penso che probabilmente funzionerà per l'esempio che hai dato comunque.
\bown\b
dove il primo \b
non è uno spazio.