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