2016-05-04 17 views
1

Dank der answer by Wiktor Stribiżew und seiner ausführlichen Diskussion habe ich eine RegEx (\p{L}+(?:\s+\p{L}+)*), die Zeichen (auch Unicode) bis zu z. ein Punkt (.) und ein Semikolon (;). Aber ich möchte einen Punkt nur dann fangen, wenn ein einzelnes Zeichen (es könnte Unicode sein) davor und einige Zeichen dahinter stehen. Lass mich dir ein paar Beispiele geben. RegEx fängt richtig z.B .:RegEx: Erlaube für einen einzelnen Punkt nach einem möglichen Buchstaben

WOJCIECH T ZAŁUSKA 
WOJCIECH ZAŁUSKA 
WOJCIECH Ted ZAŁUSKA 

aber es funktioniert nicht richtig fangen:

WOJCIECH T. ZAŁUSKA 

ich alles, aber der Punkt (WOJCIECH T Załuska) bekommen, und ich möchte auch diesen Punkt zu fangen.

Also, ich möchte Strings wie die oben zu fangen. Weitere Beispiele von dem, was ich brauche:

Ted J. Knox 
Chris Jay J. Nick 

In Strings, in denen es mehrere Dots gibt, sollte nur die erste berücksichtigt werden. Lassen Sie mich Ihnen ein Beispiel dafür geben, was ich nicht gerne habe. Betrachten Sie die folgende Zeichenfolge:

WOJCIECH T. ZAŁUSKA. Adam 

Nur WOJCIECH T. ZAŁUSKA gefangen werden sollte. Ich habe versucht (\p{L}+(?:\s+\p{L}+\.)*), aber es fängt mehr als einen Punkt und haben mehr Mängel.

+0

sind eigenständige diese Strings? Oder in einem markierten Text? –

+0

Nun, wenn der Punkt nur nach dem zweiten "Wort" kommen kann, verwenden Sie ['\ p {L} + (?: \ S + \ p {L} + \.)? (?: \ S + \ p {L} +) + '] (https://regex101.com/r/bN6oZ9/1). –

+0

Sehr geehrte @ WiktorStribiżew Sie sind Standalone: ​​eine Zeichenfolge = eine RegEx. Ihre RegEx ist so perfekt wie immer. Ich kann nicht sagen, wie dankbar ich für deine fortwährende Hilfe bin. – menteith

Antwort

1

Wenn der Punkt erst nach dem zweiten "Wort" kommen kann, verwenden Sie

\p{L}+(?:\s+\p{L}\.)?(?:\s+\p{L}+)+ 

die regex demo

Siehe

Das Muster übereinstimmen:

  • \p{L}+ - 1 oder mehr Buchstaben
  • (?:\s+\p{L}\.)? - 1 oder 0 Folgen von 1 + Leerzeichen + 1 Buchstabe + ein Punkt
  • (?:\s+\p{L}+)+ - 1+ Sequenzen von 1+ Leerzeichen + 1 oder mehr Buchstaben
+0

Was ist der Unterschied zwischen '\ h' und' \ s '? –

+0

'\ h' steht für horizontale Leerzeichen (es passt nicht zu Zeilenumbrüchen und Zeilenumbrüchen), während' \ s' mit allen Leerzeichen übereinstimmt. Normalerweise verwende ich '\ h' bei den Online-Testern, um nicht in die nächste Zeile überzulaufen (da dort normalerweise Zeilen getestet werden, nicht ganze Strings). –

+0

hmm .. cool .. seltsam, weil, wenn ich den Ausdruck zu verwenden, \ s statt, es hebt nicht die gleiche Sache wie \ h. –

Verwandte Themen