Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

Python, aantal groups in reguliere expressie icm OR

Pagina: 1
Acties:

Onderwerpen


  • Tim Schuhmacher
  • Registratie: Januari 2000
  • Nu online
Ik heb de volgende reguliere expressie en wil telefoonnummers matchen. Lukt prima, maar ik vind het niet zo fraai zoals het nu gaat.

Python:
1
>>> phonePattern = re.compile('^(\d{3})\D*(\d{7})|(\d{4})\D*(\d{6})$')

in woorden: match (3 cijfers & onbekend aantal niet-cijfers & 7 cijfers) of (4 cijfers & onbekend aantal niet-cijfers & 6 cijfers)
Maar door de groepering ()()|()() is het resultaat als volgt:

Python:
1
2
3
4
>>> phonePattern.search('0510-123456').groups()
(None, None, '0510', '134567')
>>> phonePattern.search('050-1234567').groups()
('050', '1234567', None, None)

Nou kan ik het resultaat weer filteren op 'None' values, maar liever zou ik uit de expressie maar 2 elementen willen hebben. Kan dat?

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Ja. Kijk eens in de documentatie bij (?=...), en bedenk dan iets als
spoiler:
^(\d{3}(?=\D*\d{7}$)|\d{4}(?=\D*\d{6}$))\D*(\d*)$
. Dit is maar een voorbeeld, lijkt me niet handig als je echt NL-telefoonnummers wil matchen, bijvoorbeeld vanwege de \D*, maar ook vanwege 06-nummers ;)

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


  • Tim Schuhmacher
  • Registratie: Januari 2000
  • Nu online
Bedankt, ik had een beperkte cheat sheet blijkbaar gevonden.

Mijn voorbeelden waren versimpeld voor de vraag en 06 en zo hoef ik niet te matchen. Maar zo kom ik weer verder

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Kijk ook eens naar libphonenumber; daar zit ook een findNumbers in die telefoonnummers uit tekst schraapt (en die kan meteen overweg met allerlei uitzonderingen, edge-cases en als bonus een hele shitload meer landen dan alleen NL :P
Geen idee of je vanuit Python tegen een Java lib aan kunt schoppen (vast); wij flikken 't met C# :Y) Met dank aan IKVM voor de geïnteresseerden

[ Voor 30% gewijzigd door RobIII op 08-12-2011 23:59 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Tim Schuhmacher
  • Registratie: Januari 2000
  • Nu online
oh wat gaaf! Die is zeker bruikbaar.

Desondanks ben ik ook blij dat ik nu van die (?=...) weet

edit:
er is een python port: https://github.com/daviddrysdale/python-phonenumbers

[ Voor 30% gewijzigd door Tim Schuhmacher op 08-12-2011 23:59 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Oh, dat was me ontgaan :P
Er is ook een C# port, maar last I looked was die zo gaar als een klontje :P

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1