regex: IBAN oder ISBN?
regex: IBAN oder ISBN?#
zwei Großbuchstaben
zwei Prüfziffern
bis zu 30 Ziffern, nach belieben durch Leerzeichen getrennt
z.B.
DE07 1234 1234 1234 1234 12
Präfix–Gruppennummer–Verlagsnummer–Titelnummer–Prüfziffer
z.B.
978-3-86680-192-9
import re
regex = r"""
(?P<isbn> \d+-\d+-\d+-\d+-\d)
| (?P<iban>[A-Z]{2}\d{2}[\d ]{4,30}\W)
"""
test_str = ("Falls die Überweisung für das Buch 978-3-86680-192-9 auf \n"
"DE07 1234 1234 1234 1234 12 nicht klappt, bitte \n"
"einfach Rosi unter 089 / 32 16 8 anrufen!\n")
matches = re.finditer(regex, test_str, re.MULTILINE | re.VERBOSE)
for matchNum, match in enumerate(matches, start=1):
print ("Match {matchNum} was found at {start}-{end}: {match}".format(matchNum = matchNum,
start = match.start(), end = match.end(), match = match.group()))
for groupNum in range(0, len(match.groups())):
groupNum = groupNum + 1
print ("Group {groupNum} found at {start}-{end}: {group}".format(groupNum = groupNum,
start = match.start(groupNum), end = match.end(groupNum),
group = match.group(groupNum)))
Match 1 was found at 35-52: 978-3-86680-192-9
Group 1 found at 35-52: 978-3-86680-192-9
Group 2 found at -1--1: None
Match 2 was found at 58-86: DE07 1234 1234 1234 1234 12
Group 1 found at -1--1: None
Group 2 found at 58-86: DE07 1234 1234 1234 1234 12
regex_dict = { "ISBN": r"\d+-\d+-\d+-\d+-\d",
"IBAN": r"[A-Z]{2}\d{2}[\d ]{4,30}",
"TEL": r"\d+\s*[-/]\s*[\d ]+"}
regex = "|".join([ f"(?P<{k}>{v} )" for k,v in regex_dict.items()])
test_str = ("Falls die Überweisung für das Buch 978-3-86680-192-9 auf \n"
"DE07 1234 1234 1234 1234 12 nicht klappt, bitte \n"
"einfach Rosi unter 089 / 32 16 8 anrufen!\n")
def substfn(match):
match_dict = {k: f"{match.group(k)} ({k})" for k in regex_dict.keys() if match.group(k) != None}
print(match_dict)
return " ".join(match_dict.values())
# You can manually specify the number of replacements by changing the 4th argument
result = re.sub(regex, substfn, test_str, 0, re.MULTILINE | re.VERBOSE)
if result:
print (result)
{'ISBN': '978-3-86680-192-9 (ISBN)'}
{'IBAN': 'DE07 1234 1234 1234 1234 12 (IBAN)'}
{'TEL': '089 / 32 16 8 (TEL)'}
Falls die Überweisung für das Buch 978-3-86680-192-9 (ISBN) auf
DE07 1234 1234 1234 1234 12 (IBAN)nicht klappt, bitte
einfach Rosi unter 089 / 32 16 8 (TEL)anrufen!