import re
regex = re.compile(r"(?<=[\.,;\s\t\n])[a-z0-9\-]{2,}(?=[\.,;\s\t\n])", flags=re.MULTILINE)
test_str = (" -a- -a-ll- [Enter KING HENRY, LORD JOHN OF , -,the;, LANCASTER , , the EARL\n"
"!and =all =12 ,123-,;, -qw !all a-a -doof I -i ,9ab+\n"
"xxx xx x !all ?nicht !and -doof -12 -aa\n"
" of WESTMORELAND, SIR WALTER BLUNT, and others]\n"
"12 d12a ; a1 d1a, ! ,aaaaa aaa ,aa1 .1a , ; !.a12\n"
"KING HENRY IV So !shaken as we, the are, so wan with care,\n"
" Find we a time; for frighted peace to pant,\n"
" And breathe short-winded accents of new broils\n"
" To be commenced in strands afar remote.\n"
" No more the thirsty entrance of this soil\n"
" Shall 12 daub her 1l1ips with her own children's blood;\n"
" Nor more shall trenching war channel her fields,\n"
" Nor bruise her flowerets with the armed hoofs\n"
" Of hostile paces: those opposed eyes,\n"
" Which, like the meteors of a troubled heaven,\n"
" All of one nature, of one substance bred,\n"
" Did lately meet in the intestine shock\n"
" And furious close of civil butchery\n"
" Shall now, in mutual well-beseeming ranks,\n"
" March all one way and be no more opposed\n"
" Against acquaintance, kindred and allies:\n"
" The edge of war, like an ill-sheathed knife,\n"
" No more shall cut his master. Therefore, friends,\n"
" As far as to the sepulchre of Christ,\n"
" Whose soldier now, under whose blessed cross\n"
" We are impressed and engaged to fight,\n"
" Forthwith a power of English shall we levy;\n"
" Whose arms were moulded in their mothers' womb\n"
" To chase these pagans in those holy fields\n"
" Over whose acres walk'd those blessed feet\n"
" Which fourteen hundred years ago were nail'd\n"
" For our advantage on the bitter cross.\n"
" But this our purpose now is twelve month old,\n"
" And bootless 'tis to tell you we will go:\n"
" Therefore we meet not now. Then let me hear\n"
" of you, my gentle cousin Westmoreland,\n"
" What yesternight our council did decree\n"
" In forwarding this dear expedience.\n\n"
"WESTMORELAND my liege, this haste was hot in question,\n")
matches = regex.finditer(test_str)
for match_num, match in enumerate(matches, start=1):
print(f"Match {match_num} was found at {match.start()}-{match.end()}: {match.group()}")
for group_num, group in enumerate(match.groups(), start=1):
print(f"Group {group_num} found at {match.start(group_num)}-{match.end(group_num)}: {group}")
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Python, please visit: https://docs.python.org/3/library/re.html