2010-02-12 15 views
20

Ich brauche Hilfe bei der Zusammenstellung einer Regex, die Wort mit "Id" mit Groß- und Kleinschreibung übereinstimmt übereinstimmen.regex: Übereinstimmung des Wortes, das mit "Id" endet

+1

Was ist mit diesen Worten: 'Id' (beginnt und endet mit' Id') und 'O'HaraId' (möchten Sie' O'HaraId' oder 'HaraId') und' foo-barId' (do Sie möchten "foo-barId" oder "barId" zuordnen? Kurz gesagt: Bitte definieren Sie, was ein "Wort" bedeutet (oder wie es sein soll). –

Antwort

38

diesen regulären Ausdruck Versuchen:

\w*Id\b 

\w* ermöglichen Wortzeichen vor Id und die \b sorgt dafür, dass Id am Ende des Wortes ist (\b ist Behauptung Wortgrenze).

+0

@epitka, beachten Sie, dass '\ w' auch mit Zahlen und dem Unterstrich übereinstimmt. Kurz gesagt, die Strings "___ Id" und "12345Id" werden ebenfalls angepasst. –

+0

Ich gab Ihnen eine Upvote, aber Epitka nicht angeben, ob nur "Id" zulässig ist, so würde ich versucht sein, die * für eine + – BenAlabaster

+0

beste Antwort ändern: kurz und einfach zu verstehen! – huug

4

Wie wäre es mit \A[a-z]*Id\z? [Dies macht Zeichen vor Id optional. Verwenden \A[a-z]+Id\z wenn es muss ein oder mehrere Zeichen sein Id vorhergehenden.]

1
Regex ids = new Regex(@"\w*Id\b", RegexOptions.None); 

"\ b" bedeutet "-Wort break" & \ w jede Wortzeichen bedeuten, so \ w * Id \ b bedeutet „{Sachen }Ich würde". Wenn RegexOptions.IgnoreCase nicht berücksichtigt wird, wird die Groß-/Kleinschreibung beachtet.

2

würde ich
\b[A-Za-z]*Id\b
Die \ b entspricht den Anfang und das Ende eines Wortes das heißt Raum, Tab oder Neue-Zeile oder der Beginn oder das Ende einer Zeichenfolge verwendet werden.

Die [A-Za-z] wird mit jedem Buchstaben übereinstimmen, und das * bedeutet, dass 0+ übereinstimmen. Endlich gibt es das Id.

Beachten Sie, dass Wörter mit Großbuchstaben in der Mitte wie 'teStId' übereinstimmen.

Ich benutze http://www.regular-expressions.info/ für regex Referenz

+0

Die Menge "a-z" schließt "é" und andere ähnliche Zeichen aus. Vielleicht kein Problem, aber etwas, das Epitka wissen möchte. –

+1

[A-Za-z] stimmt nicht mit nicht-englischen Buchstaben überein, sollte daher zugunsten von \ w vermieden werden, es sei denn, es kann garantiert werden, dass nur englische Buchstaben angezeigt werden. – BenAlabaster

5

Diese den Trick kann:

\b\p{L}*Id\b 

Wo \p{L} passt zu jedem (Unicode) Buchstaben und \b entspricht einer Wortgrenze.

+0

funktioniert \ p {L} in C# regex?Ich habe das vorher nie gesehen und wähle normalerweise \ w – BenAlabaster

+0

@BenAlabaster, ja: http://msdn.microsoft.com/en-us/library/20bw873z.aspx#SupportedUnicodeGeneralCategories Und ja, vielleicht '\ w' ist ausreichend für das OP, aber es passt mehr als Buchstaben (siehe meinen Kommentar unter Gumbo's Post). –

7

Gumbo meine Stimme bekommt, jedoch die OP nicht angeben, ob nur „Id“ ist ein zulässiges Wort, das bedeutet, dass ich eine kleine Änderung machen würde:

\w+Id\b 

1 oder mehr Wortzeichen gefolgt von "Id" und einem brechenden Raum. Die [a-zA-Z] -Varianten berücksichtigen nicht-englische alphabetische Zeichen nicht. Ich könnte auch \ s anstelle von \ b als Leerzeichen anstelle von Leerzeichen verwenden. Es hängt davon ab, ob Sie mehrere Zeilen umbrechen müssen.

Verwandte Themen