Reguliere expressie met jokertekens die bij elk teken passen

Ik ben nieuw bij regex en ik probeer iets te bedenken dat past bij een tekst zoals hieronder:

ABC: (z) 02 jan 1999 \n

Opmerkingen:

  • tekst begint altijd met “ABC:”
  • er kunnen nul, een of meer spaties tussen ‘:’ en (z) staan.
  • Variaties van (z) ook mogelijk – (zz), (zzzzzz).. etc maar altijd a
    niet-cijferig teken tussen “()”
  • er kunnen nul, één of meer zijn
    spaties tussen (z) en jan
  • jan kan jan, januari, enz. zijn
  • datum kan in elk formaat zijn en mag wel/geen andere tekst bevatten, dus
    Ik zou heel graag willen weten of er een regex is die ik kan gebruiken om vast te leggen
    alles en nog wat dat wordt gevonden tussen ‘(z)’ en ‘\n’

Alle hulp wordt zeer op prijs gesteld! Bedankt


Antwoord 1, autoriteit 100%

Het volgende zou moeten werken:

ABC: *\([a-zA-Z]+\) *(.+)

Uitleg:

ABC:            # match literal characters 'ABC:'
 *              # zero or more spaces
\([a-zA-Z]+\)   # one or more letters inside of parentheses
 *              # zero or more spaces
(.+)            # capture one or more of any character (except newlines)

Om uw gewenste groepering te krijgen op basis van de onderstaande opmerkingen, kunt u het volgende gebruiken:

(ABC:) *(\([a-zA-Z]+\).+)

Antwoord 2, autoriteit 9%

Zonder de exacte regex-implementatie te weten die u gebruikt, kan ik alleen algemeen advies geven. (De syntaxis zal ik perl zijn, want dat is wat ik ken, sommige talen zullen moeten worden aangepast)

Kijkend naar ABC: (z) jan 02 1999 \n

  • Het eerste dat overeenkomt is ABC: Dus het gebruik van onze regex is /ABC:/

  • Je zegt dat ABC altijd aan het begin van de tekenreeks staat, dus /^ABC/zorgt ervoor dat ABC aan het begin van de tekenreeks staat.

  • Je kunt spaties matchen met de \s(let op het geval) -instructie. Met alle richtlijnen kun je een of meer matchen met +(of 0 of meer met *)

  • Je moet ontsnappen aan het gebruik van (en )omdat het een gereserveerd teken is. dus \(\)

  • Je kunt elk teken zonder spatie of nieuwe regel matchen met .

  • Je kunt alles matchen met .*maar je moet oppassen dat je niet te hebzuchtig bent en alles vastlegt.

Dus om vast te leggen wat je hebt gevraagd. Ik zou /^ABC:\s*\(.+?\)\s*(.+)$/

gebruiken

Wat ik lees als:

Begint met ABC:

Kan enkele spaties bevatten

heeft (

heeft enkele tekens

heeft )

kan enkele spaties bevatten

leg vervolgens alles vast tot het einde van de regel (dat is $).

Ik raad ten zeerste aan om een kopie van het volgende te bewaren:
http://www.cheatography.com/davechild/cheat-sheets/regular -expressies/


Antwoord 3, autoriteit 2%

Dit zou aan uw eisen moeten voldoen.

ABC:\s*(\(\D+\)\s*.*?)\\n

Hier is het met enkele tests http://www.regexplanet.com/cookbook/ ahJzfnJlZ2V4cGxhbmV0LWhyZHNyDgsSBlJlY2lwZRiEjiUM/index.html

Meer informatie over reguliere expressies: http://www.regular-expressions.info/characters. html

Other episodes