Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #198073

Re: Pythonic way to combine regular expressions?

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

Show all headers | View raw


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


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