Antworten:
\b(?:(T)|t)own(s?)\b
→ (?1:\u)village$2
(Und deaktivieren Sie Groß- / Kleinschreibung im Dialogfeld ignorieren)
\b
= Wortgrenze (?:)
= nicht erfassende Gruppe (?1:\u)
= Wenn Gruppe 1 erfasst, wird das nächste Zeichen in Großbuchstaben umgewandelt www.
obwohl)!
Ich bin gerade auf meiner Arbeitsmaschine, also kein TextMate hier, den ich testen kann, aber ich denke, das ist es könnte Tun Sie, was Sie wollen:
Find: \b(T)?((?<!T)t)?(?<! )own(s)?\b
Replace: (?1:Village)(?2:village)$3
(Deaktivieren Sie zuerst "Groß- / Kleinschreibung ignorieren".)
Erläuterung:
Das Suchmuster sucht nach den Buchstaben own
vorangestellt von a T
oder ein t
und nimmt sie dann auf $1
und $2
beziehungsweise. Das (?<!T)
Im zweiten Capture wird sichergestellt, dass Sie nicht beide gleichzeitig erhalten (z. B. Tt
zusammen), so unwahrscheinlich das wahrscheinlich ist, und die (?<! )
Bit bedeutet das own
Ein Leerzeichen darf nicht vorangestellt werden - dies sollte verhindern, dass es mit dem Wort übereinstimmt own
von selbst. Das \b
auf jeder Seite bedeutet, dass es nur dem ganzen Wort entsprechen sollte (ansonsten wird es mit Dingen wie übereinstimmen townies
und chown
). Schließlich die (s)?
Teil fängt ein Finale s
(falls vorhanden) bis $3
.
Das Ersetzungsmuster verwendet bedingte Einfügungen um zu bestimmen, durch was der Text ersetzt werden soll. Im Pseudocode sagt der Ersetzungsstring im Grunde:
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 }
(Und dann fügt es hinzu $3
, die entweder leer sein oder ein s
)
Es ist hässlich, aber ich denke, es wird wahrscheinlich für das Beispiel funktionieren, das Sie sowieso gegeben haben.
\bown\b
wo der erste \b
ist kein Leerzeichen.