2017-09-12 2 views
-3

Ich möchte einen regulären Ausdruck verwenden, um alle Vorkommen einer Phrase zu finden, wenn sie nicht in einigen Begrenzungszeichen enthalten ist. Ich habe versucht, einen zusammenzusetzen, hatte aber einige Schwierigkeiten mit den negativen Lookaheads.Regex - Finden Sie Übereinstimmungen, die nicht im Muster enthalten sind

Mein Suchbegriff ist "meine Phrase". Das Start-Delimiter-Tag ist [[und das End-Delimiter-Tag ist]]. Die Zeichenfolge, die ich suchen möchte, ist:

Hier ist ein Satz mit mein Satz, hier ist ein weiterer Teil, den ich nicht auf [[meine Phrase]] übereinstimmen möchte. Ich möchte dieses Vorkommen von meine Phrase finden.

Von dieser Zeichenfolge würde ich erwarten, alle Vorkommen von "meine Phrase" mit Ausnahme der in [[]] enthaltenen zu finden.

Ich hoffe, das macht Sinn, danke im Voraus für jede Anleitung.

+0

Bitte teilen Sie Ihre Regex. Wahrscheinlich müssen Sie den Code für das Muster anpassen, und hier sind wahrscheinlich keine Umrisse erforderlich. Wenn Sie etwas anpassen müssen, außer zwischen einigen Begrenzern, bedeutet dies fast immer, dass Sie die begrenzten Teilzeichenfolgen abgleichen und dann in anderen Kontexten den Anforderungen entsprechen, die Sie bei der Aufnahme in einem der beiden Bereiche benötigen. Was ist dein letztes Ziel? Extrahiere einfach 'meine Phrase' aus den erwarteten Kontexten? –

+0

Suchst du nach "source.IndexOf" ("[[my phrase]]") 'oder' source.Replace ("[[my phrase]]", "myPhraseSubstitution"); '? –

+0

Ich suche nach allen Vorkommen von "meine Phrase", wo sie nicht in [[]] enthalten sind. Mit den Spielen transformiere ich dann die Saite. – squariegoes

Antwort

1

[^#]my phrase[^#]

Ich habe eine RegEx oben geklopft, die das tun, was Sie fragen, diese here zu sehen ist.

Wörtlich nur aus # als ein Zeichen zu entkommen und lassen jedes andere Zeichen zurückgegeben werden. Sie können den Index dieser Ergebnisse zurückgeben, aber vergessen Sie nicht, das erste und das letzte Zeichen der Zeichenfolge zu entfernen.

Hinweis: Dies wird nicht „meine Phrase“ aufheben, die den Satz ohne Zeichen enden folgendes es

Bearbeiten - Sehen, wie Sie den Umfang geändert, während ich diese Antwort schreibt, hier ist die RegEx für das andere Trennzeichen:

[^[[]my phrase[^\]\]]

1
(?<=[^\[])my phrase(?=[^\]]*) 

Dadurch werden auch die nachfolgenden Interpunktionszeichen eliminiert.

+0

'(? <= [^ \ []) Meine Wortgruppe (? = [^ \]] *)' Wird 'my phrase' am Anfang/Ende der Zeichenfolge aufgrund der negierten Zeichenklassen nicht entsprechen, die mit a übereinstimmen müssen Char anders als die Char (s) in ihnen definiert. –

+0

Es passt irgendwie, wenn das Muster am Ende ist - * erlaubt 0 oder mehr Vorkommen. Aber ja, um es gleich am Anfang zu vergleichen, ist das besser: '(? <= [^ \ []) Meine Phrase (? = [^ \]] *) |^Meine Phrase (? = [^ \]] *) ' –

+0

Danke, das hat geholfen – squariegoes

Verwandte Themen