Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #198073
| From | ram@zedat.fu-berlin.de (Stefan Ram) |
|---|---|
| Newsgroups | comp.lang.python, alt.folklore.computers |
| Subject | Re: Pythonic way to combine regular expressions? |
| Followup-To | comp.lang.python |
| Date | 2026-09-25 19:19 +0000 |
| Organization | Stefan Ram |
| Message-ID | <order-20260925201802@ram.dialup.fu-berlin.de> (permalink) |
| References | <MrztS.208529$Nn1.7474@fx18.ams4> <pattern-20260925200755@ram.dialup.fu-berlin.de> |
Cross-posted to 2 groups.
Followups directed to: comp.lang.python
ram@zedat.fu-berlin.de (Stefan Ram) wrote or quoted:
>Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> wrote or quoted:
>>What is a good way to combine regular expressions in Python? We are
>>cogitating the most /Pythonic/ way to make this happen.
>> number:
>> sign? integer-constant
>> | sign? floating-point-constant
>> integer-constant:
>> digit-sequence
>> floating-point-constant:
>> fractional-constant exponent?
>> | digit-sequence exponent
>> fractional-constant:
>> digit-sequence? "." digit-sequence
>> | digit-sequence "."
>> exponent:
>> ( "e" | "E" ) sign? digit-sequence
>> sign:
>> "+" | "-"
>> digit-sequence:
>> digit
>> | digit digit-sequence
>> digit:
>> "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
>Maybe something like this?
We can also write the definitions in the same order as in the EBNF.
import re
from typing import Final
NUMBER = lambda: rf"^{SIGN()}?(?:{INTEGER_CONSTANT()}|{FLOATING_POINT_CONSTANT()})$"
INTEGER_CONSTANT = lambda: DIGIT_SEQUENCE()
FLOATING_POINT_CONSTANT = lambda: \
rf"(?:{FRACTIONAL_CONSTANT()}(?:{EXPONENT()})?|{DIGIT_SEQUENCE()}{EXPONENT()})"
FRACTIONAL_CONSTANT = lambda: \
rf"(?:(?:{DIGIT_SEQUENCE()})?\.{DIGIT_SEQUENCE()}|{DIGIT_SEQUENCE()}\.)"
EXPONENT = lambda: rf"[eE]{SIGN()}?{DIGIT_SEQUENCE()}"
SIGN = lambda: r"[+-]"
DIGIT_SEQUENCE = lambda: rf"{DIGIT()}+"
DIGIT = lambda: r"[0-9]"
NUMBER_VALIDATOR: Final[ re.Pattern[ str ]] = re.compile( NUMBER() )
example = "123"
is_ok = bool( NUMBER_VALIDATOR.match( example ))
print( is_ok )
Newsgroups: comp.lang.python,alt.folklore.computers
Followup-To: comp.lang.python
Back to comp.lang.python | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Pythonic way to combine regular expressions? Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> - 2026-09-26 02:54 +0800
Re: Pythonic way to combine regular expressions? ram@zedat.fu-berlin.de (Stefan Ram) - 2026-09-25 19:08 +0000
Re: Pythonic way to combine regular expressions? ram@zedat.fu-berlin.de (Stefan Ram) - 2026-09-25 19:19 +0000
Re: Pythonic way to combine regular expressions? ram@zedat.fu-berlin.de (Stefan Ram) - 2026-09-26 10:04 +0000
Re: Pythonic way to combine regular expressions? Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> - 2026-09-26 20:09 +0800
Re: Pythonic way to combine regular expressions? ram@zedat.fu-berlin.de (Stefan Ram) - 2026-09-26 12:22 +0000
csiph-web