Nieuws:

We zijn er weer.

Na lange tijd van afwezigheid zijn we er weer  :laugh:
We hebben alle wachtwoorden gereset, je oude wachtwoord werkt niet meer.Je moet via het "wachtwoord vergeten"-linkje je wachtwoord resetten. Je krijgt hiervoor een mailtje op het adres dat je bij ons geregistreerd hebt.

De komende tijd zijn we nog druk bezig om de rest van de site op te bouwen, dus het kan zijn dat sommige onderdelen (tijdelijk) niet werken.

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: Regex nodig voor python  (gelezen 275 keer)

Offline bartveurink

  • Lid
  • Steunpunt: Nee
Regex nodig voor python
« Gepost op: 2018/04/19, 14:47:43 »
Ik ben een regex nodig dat een match geeft als het een lijst van getallen bevat. Op het moment gebruik ik onderstaande regex, maar hier zit een fout in. Een juiste string is bijv.: 1,2,3 enzovoorts.

'^[0-9,\,]*$'Hier kan de fout ontstaan bij 2 komma's achter elkaar. Er moet nl. wel een getal tussen de komma's staan.

Offline spievensterke

  • Lid
  • Steunpunt: Nee
Re: Regex nodig voor python
« Reactie #1 Gepost op: 2018/04/19, 15:24:19 »
@ bartveurink,

Kan je hiermee wat aanvangen ? :   https://www.regular-expressions.info/
én ook:  https://regexr.com/   
info:  https://en.wikipedia.org/wiki/Regular_expression   
én:  https://nl.wikipedia.org/wiki/Reguliere_expressie

Misschien ook:   http://www.rexegg.com/      ... én:   https://www.computerhope.com/jargon/r/regex.htm

eventueel ook :   https://docs.python.org/2/howto/regex.html    ...  én ook:  https://stackoverflow.com/questions/43171384/regex-in-python  ...

én misschien ook dit:   https://docs.python.org/2/library/re.html

... om te helpen, zelf ben ik daarin niet bedreven.

Groet,
spievensterke.
« Laatst bewerkt op: 2018/04/19, 16:57:24 door spievensterke »
Toshiba Satellite L500-1C7 Testlaptop > Hdd1; LinuxMint64- Cinnamon- 18.3  >  Hdd2: Ubuntu - 18.04.- LTS- 64bit  -- Intel Mobile Video /

Offline Nunslaughter

  • Lid
    • timovwb
  • Steunpunt: Nee
Re: Regex nodig voor python
« Reactie #2 Gepost op: 2018/04/19, 20:13:29 »
regex101 is een goede site om uw regex te testen en controleren: https://regex101.com/

Maar zoiets kan ook gewoon met Python. Om even een bekende quote boven te halen:

Citaat
Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems.

Een vrij eenvoudige one-liner:

all(x.isdigit() for x in s.split(","))
Splits de string via de komma zodat ge een list krijgt. Loop dan over deze lijst en check of elk element een integer is, dit is nu een list met True/False items. Check met all() of alle  items True zijn. Enkele tests:

>>> s = "1,2,3,4"
>>> all(x.isdigit() for x in s.split(","))
True
>>> s = "1,2,3,,4"
>>> all(x.isdigit() for x in s.split(","))
False
>>> s = "1,2,3,4,a,b,c"
>>> all(x.isdigit() for x in s.split(","))
False



Offline profoX

  • Lid
    • wesley
    • Lionslink
  • Steunpunt: Nee
Re: Regex nodig voor python
« Reactie #3 Gepost op: 2018/04/20, 01:00:57 »
Goed punt van Nunslaughter. En zo kan je ook makkelijker meteen de getallen eruit halen als je ze nodig hebt :-)

Of als je het toch per se met een regex wilt doen, probeer deze dan eens:

^(?:\d+,)*\d+$
Dit matcht ofwel een getal dat op zichzelf staat vanwege \d+$
ofwel een getal met ervoor een reeks getallen die van elkaar zijn gescheiden met een komma,
omdat er 0, 1 of meer (vanwege de *) keer een getal gevolgd door een komma ervoor mag komen.

\d is overigens identiek aan [0-9]
En ?: wordt gebruikt om een non-capturing groep te definiëren (is niet per se nodig)
Human Knowledge Belongs To The World -- Antitrust (2001)
Nederlandstalige Ubuntu documentatie van Ubuntu-NL (wiki)

Offline bartveurink

  • Lid
  • Steunpunt: Nee
Re: Regex nodig voor python
« Reactie #4 Gepost op: 2018/04/22, 10:04:33 »
Op onderstaande manier heb ik dit opgelost.
def chk3(list):
result="true"
for i in list.split(','):
if not re.match('^[0-9]+',i):
result="false"
return result

Offline Nunslaughter

  • Lid
    • timovwb
  • Steunpunt: Nee
Re: Regex nodig voor python
« Reactie #5 Gepost op: 2018/04/22, 20:00:34 »
Dit stukje code zal iedere Python programmeur koude rillingen bezorgen :-). Meerdere opmerkingen:

1. De naam van de functie is best slecht. Wat betekent `chk3`?
2. `list` is een builtin, het is best deze niet te gebruiken als variabele. Ook omdat het een string is als input, geen list.
3. In plaats van de strings "true" en "false" te definiëren, gebruik de ingebouwde `True` en `False` booleans.
4. Een regex gebruiken om te kijken of een string een integer is is overkill. Gebruik `str.isdigit()` of cast met `int()` en vang de exception op.
5. Eénmaal duidelijk is dat een element in de lijst geen integer is kunt ge direct de lus afbreken om wat snelheidswinst te behalen.

Hier mijn versie zonder te veel van uw code te veranderen:

def is_all_digits(comma_separated_string):
    for item in comma_separated_string.split(","):
        if not item.isdigit():
            return False
    return True