regex: komt overeen met een woord dat eindigt met “Id”

Ik heb hulp nodig bij het samenstellen van een regex dat voldoet woord dat eindigt met “Id” met hoofdlettergevoelig wedstrijd.

  • Hoe zit het met deze woorden: Id (begint en eindigt met Id) en O'HaraId (wilt u de wedstrijd O'HaraId of HaraId) en foo-barId (wilt u de wedstrijd foo-barId of barId)? In het kort: gelieve te definiëren wat een “woord” betekent (of wat je wilt).
InformationsquelleAutor epitka | 2010-02-12

 

6 Replies
  1. 61

    Proberen deze reguliere expressie:

    \w*Id\b

    \w* kan word tekens in de voorkant van Id en de \b zorgt ervoor dat Id is aan het eind van het woord (\b is de grens van een woord bewering).

    • merk op dat \w komt ook overeen met de cijfers en de underscore. In de korte strings ___Id en 12345Id zal ook worden aangepast.
    • Ik gaf je een upvote, maar epitka niet aangeven of gewoon “Id” is toegestaan, dus ik zou in de verleiding komen om te veranderen * voor a +
    • beste antwoord: kort en makkelijk te begrijpen!
  2. 9

    Gumbo krijgt mijn stem, echter, de OP niet aangeven of alleen de “Id” is een toegestaan woord, wat betekent dat ik een kleine wijziging aanbrengen:

    \w+Id\b

    1 of meer word tekens, gevolgd door “Id” en een spatie. De [a-zA-Z] varianten geen rekening houden met niet-engelse alfabetische tekens. Ik zou ook gebruik van \ \ ‘ s in plaats van \b als een spatie in plaats van een spatie. Het zou afhangen als je nodig hebt om wrap over meerdere lijnen.

  3. 6

    Dit kan doen de truc:

    \b\p{L}*Id\b

    Waar \p{L} overeenkomt met een (Unicode) – brief en \b komt overeen met een woordgrens.

    • doet \p{L} werken in C# regex? Ik heb nog nooit gezien dat vóór en kiezen meestal voor \w
    • ja: msdn.microsoft.com/en-us/library/… En ja, misschien \w is voldoende voor de OP, maar het komt overeen met meer dan letters (zie mijn reactie onder Gumbo ‘ s post).
  4. 5

    Hoe over \A[a-z]*Id\z? [Dit maakt de tekens vóór Id optioneel. Gebruik \A[a-z]+Id\z als er moet worden een of meer tekens vóór Id.]

    • Waarom \z met mij gewerkt, terwijl de \b vermeld in alle andere antwoorden niet werken?
  5. 2

    Ik zou gebruiken

    \b[A-Za-z]*Id\b

    De \b komt overeen met het begin en het einde van een woord, d.w.z. spatie, tab of nieuwe regel, of het begin of het einde van een string.

    De [A-Za-z] zal overeenkomen met een letter, en de * betekent dat 0+ gekoppeld. Tenslotte is er de Id.

    Er rekening mee dat dit zal overeenkomen met woorden die met hoofdletters in het midden, zoals ‘teStId’.

    Ik gebruik http://www.regular-expressions.info/ voor regex referentie

    • De set a-z sluit é en andere soortgelijke tekens. Misschien niet een probleem, maar iets epitka wilt weten.
    • [A-Za-z] komt niet overeen met niet-engelse alfabetische tekens, dus moet worden vermeden ten gunste van \w tenzij een garantie kan worden gemaakt dat alleen engels letters zal verschijnen.
  6. 1
    Regex ids = new Regex(@"\w*Id\b", RegexOptions.None);

    “\b” betekent “word-break” & \w bedoel elke woord-teken, dus \w*Id\b betekent “{spullen} – Id”. Door niet inclusief RegexOptions.IgnoreCase, het zal hoofdlettergevoelig.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *