2017-06-28 4 views
-3

ich für einen regulären Ausdruck suchen, die diesen beiden Beispielen übereinstimmen:Regex, die zwei Sätze übereinstimmt mit einem Wort unterschiedlichen

Hello I am really him.

Hello I am him.

Im Allgemeinen, wie Sie einen regulären Ausdruck einrichten kann Das entspricht einer Zeichenfolge und einer Teilmenge der Zeichenfolge, die ein Wort fehlt?

aktualisieren:

So war dies nur ein Beispiel Satz, um zu sehen, ob ich das gleiche Muster auf meiner eigentlichen Zeichenfolge reproduzieren konnte. Das hat jedoch nicht ganz funktioniert, also sind sie hier. Ich brauche den Satz entsprechen:

Ulcerative colitis patient, biopsy taken from the descending colon, macroscopic inflammation vissible

, wo das Wort descending kann oder nicht sein, und das Wort no nach dem letzten Komma erscheinen. So könnte es sein:

Ulcerative colitis patient, biopsy taken from the descending colon, macroscopic inflammation vissible

Ulcerative colitis patient, biopsy taken from the descending colon, no macroscopic inflammation vissible

Ulcerative colitis patient, biopsy taken from the colon, macroscopic inflammation vissible

Ulcerative colitis patient, biopsy taken from the colon, no macroscopic inflammation vissible

+0

So etwas wie 'Hallo, ich bin (?: wirklich)? Ihm. – sln

+0

Ich verstehe diesen Beitrag nicht. Ich dachte, Sie verwenden das ursprüngliche Beispiel als eine Art Vorlage, nicht den wortgleichen Text, den Abstand und die Großbuchstaben eines großen buchstäblichen Satzes. Nichts ist so statisch im Text !! Es wäre besser, ein paar Wortliterale zu verwenden, die mit '. *?' Durchsetzt sind, um Übereinstimmungen zu erhalten. – sln

+0

@sln In den meisten Fällen ist es statisch. Die einzige Sache, die sich ändert, ist die Anwesenheit (oder nicht) der Wörter "absteigend" und "nein" –

Antwort

1
Hello I am (\w*\s?)him. 

Sie können nicht est es here

bearbeiten nach der Frage Update mit der aktuellen Zeichenfolge und alle Testfällen:

Ulcerative colitis patient, biopsy taken from the(\s?\w*\s?)colon,(\s?\w*\s?)macroscopic inflammation vissible

Diese können unter dem folgenden regex101 Link überprüft werden: regex101.com/r/4QRJDx/3

+0

Wird das wieder funktionieren? Zum Beispiel, um 'Hallo ich bin ihn',' Hallo ich bin wirklich er.', und 'Hallo ich bin wirklich er wieder.' Könnte der Regex sein' Hallo, ich bin (\ w * \ s?) Ihm (\ w * \ s?). 'Das scheint nicht zu funktionieren, wenn ich es an meinen Sätzen teste. –

+0

Nein, natürlich würde meine Lösung nicht funktionieren, wenn das fehlende Wort am Ende des Satzes steht. Ich habe diesen Testfall auch nicht von deiner Frage –

+0

@KyleWeise bekommen, du solltest im zweiten Fall \ w und \ s invertieren. Probieren Sie Folgendes aus: 'Hallo, ich bin (\ w * \ s?) Er (\ s? \ W *).' Ich habe den Regex101-Link aktualisiert: https://regex101.com/r/4QRJDx/2 und es passt auch der zusätzlicher Testfall –

0

das Wort Make 'wirklich' und den folgenden Raum optional:

/Hello I am (?:really)?him\./ 
      ^  ^   group 
      ^     non-matching 
        ^  make the whole group optional 
         ^ escape the '.' so it only matches a literal '.' 

Demo

2

In diesem Beispiel möchten Sie "?" um einen optionalen Gegenstand zu bezeichnen. Außerdem sollten Sie "()" verwenden, um mehr als ein einzelnes Zeichen gleichzeitig zur Verfügung zu stellen.

Hier ist der reguläre Ausdruck (genaue Syntax leicht auf dem Programm basiert können abweichen):

/Hello I am (really)?him/ 

Beispiel Syntax mit egrep:

Beispiel Syntax mit sed:

echo "Hello I am him" | sed "s/Hello I am \(really \)\?him//" 
0

Die bestehenden Antworten das offensichtlichste und natürlichste Lesen der Frage.

Aber um des Interesses willen könnte eine andere Interpretation sein: wie man eine Folge von zwei Sätzen, von denen der zweite höchstens ein Wort fehlt, mit dem ersten vergleicht?

In diesem Fall Sie befinden sich in der so etwas wie:

(\w+\b\s*)*?(?:\w+\b\s*)(\w+\b\s*)*[.?!]+\1\2[.?!] 

Drei Sequenzen von Worten (null oder mehr, ein, und Null oder mehr); satzende Satzzeichen; dann nur die erste und letzte Wortsequenz.

Effizienz könnte jedoch wahrscheinlich verbessert werden.

Verwandte Themen