### Program som viser anvendelse af regulære udtryk i Python. Læs
### https://docs.python.org/3/library/re.html og
### evt. https://docs.python.org/3/howto/regex.html for de fulde
### detaljer.

import re, sys

inputfilename = sys.argv[1] # the filename, given as command line argument
regexnumber = int(sys.argv[2]) # the selection of regex, givens as
                               # next command line argument

with open(inputfilename, encoding="utf-8") as f:
    lines = f.readlines() # all lines of the file as a list of strings

# Regex'es for navne, som indeholder:
regex1 = re.compile(r"x|X") # Enten x eller X
regex2 = re.compile(r"aa")  # To a i træk
regex3 = re.compile(r"^[A-D][a-d]*$") # Kun bogstaverne a,b,c,d (med
                                      # stort bogstav i starten)
regex4 = re.compile(r"le(le)+") # Mindst to gentagelser af "le" (efter
                                # hinanden)
regex5 = re.compile(r"(.)\1") # To ens bogstaver i træk
regex6 = re.compile(r"(.)\1\1") # Tre ens bogstaver i træk
regex7 = re.compile(r"(.)\1.*\1\1$") # To ens bogstaver i træk, og de
                                     # samme to i træk senere.
regex8 = re.compile(r"(.)\1.*(.)\2") # To ens bogstaver i træk, og
                                     # andre to i træk senere.
regex9 = re.compile(r"^.$") # Kun et bogstav i alt.
regex10 = re.compile(r"^..$") # Præcis to bogstaver i alt.

regexlist = [regex1,regex2,regex3,regex4,regex5,regex6,regex7,regex8,regex9,regex10]

# Vælg blandt ovenstående regex'es:
regex = regexlist[regexnumber-1]

# Print navnet hvis regex matcher:
for l in lines:
    if regex.search(l):
        print(l.strip()) # strip() fjerner whitespace i start og
                         # slutning af strenge (her: en newline i
                         # slutningen af l)

### Her er en variant, der både printer navnet samt den del af navnet,
### som regex matcher:

#for l in lines:
#    match_object = regex.search(l)
#    if match_object:
#        print(l.strip(), "[matching part: " + match_object.group() + "]")
