2017-02-13 5 views
3

Bezieht sich auf das Anpassen von Notepad ++. Ich kenne TextFX 'Sentence case.' existiert, aber ich wollte dies mit meinem eigenen Regex/Makro steuern.Notepad ++ regex, um das erste Wort des ausgewählten Satzes groß zu schreiben

Testing gegen: hello my name is john. hello my name is john. hello my name is john.

Zur Zeit habe ich es, was gut funktioniert, wenn nichts ausgewählt ist/mit der Maus markiert.

Find what: ((?<=^|(?<=[.!?]\s)))(\w) 
Replace with: \u$0 

Allerdings, wenn ich wählen/markieren Sie den zweiten (mittleren) Satz nur (ab dem h und endet an der Zeit .), hat die Regex nichts. Hinweis: Ich habe 'Auswahl verwenden' in N ++ markiert und verwende 'Alle ersetzen'.

Dies ist sinnvoll, weil die Regex nach dem Anfang einer Zeile oder dem Zeichenmuster .!? gefolgt von einem Leerzeichen sucht.

Meine Frage ist, wie man die Regex so ändern kann, dass sie funktioniert, wenn man irgendeinen Satz markiert/hervorhebt, egal ob er am Anfang einer Zeile steht, wie in meinem Beispiel.

Ich habe versucht, ein negatives Lookbehind hinzuzufügen, um zu passen, wenn keine Zeichen gefunden werden, aber ich schaffte es nur, das erste Wort jedes Satzes groß zu schreiben.

+0

Sie wissen, es funktioniert, wenn Sie * Alle ersetzen * drücken, gibt es ein Problem mit * Ersetzen *. –

+0

Ja - wenn der Text nicht hervorgehoben ist, funktioniert die von mir bereitgestellte Regex, aber ich möchte in der Lage sein, einen Satz hervorzuheben und nur diesen Satz in einen Satz umzuwandeln. Ich muss daher die Regex auf dieses Szenario ausdehnen, das mein Ziel ist, indem ich diese Frage stelle. – u01jmg3

+0

Probieren Sie '(^ | [.!?] \ S +) (\ w)' -> '$ 1 \ u $ 2' –

Antwort

1

Die ^ entspricht dem Anfang einer Zeile, während die ausgewählte Region nicht am Zeilenanfang ist. Sie können es durch \A, die start of the matching string ersetzen. Da es in jeder ausgewählten Region übereinstimmen wird, können Sie \w nicht verwenden, Sie müssen + danach hinzufügen, um nicht jedes nachfolgende Wortzeichen in Großbuchstaben umzuwandeln.

Verwenden

(?<=\A|(?<=[.!?]\s))(\w+) 

und mit \u$0 ersetzen.

enter image description here

Alternative Art und Weise ist die Erfassung Gruppen verwendet werden (dann werden Sie in der Lage sein, Fälle anzupassen, wo die Anzahl der Leerzeichen zwischen !, ? oder . und das nächste Wort char mehr als eins ist):

(\A|[.!?]\s+)(\w+) 

mit $1\u$2 ersetzen.

Verwandte Themen