import re one_to_9 = r"(?:f(?:ive|our)|s(?:even|ix)|t(?:hree|wo)|(?:ni|o)ne|eight)" # end one_to_9 definition ten_to_19 = r"(?:(?:(?:s(?:even|ix)|f(?:our|if)|nine)te|e(?:ighte|lev))en|t(?:(?:hirte)?en|welve))" # end ten_to_19 definition two_digit_prefix = r"(?:(?:s(?:even|ix)|t(?:hir|wen)|f(?:if|or)|eigh|nine)ty)" # end two_digit_prefix definition one_to_99 = fr"(?:{two_digit_prefix}(?:[-\s]{one_to_9})?|{ten_to_19}|{one_to_9})" # end one_to_99 definition one_to_999 = fr"(?:{one_to_9}\shundred(?:\s(?:and\s)?{one_to_99})?|{one_to_99})" # end one_to_999 definition one_to_999_999 = fr"(?:{one_to_999}\sthousand(?:\s{one_to_999})?|{one_to_999})" # end one_to_999_999 definition one_to_999_999_999 = fr"(?:{one_to_999}\smillion(?:\s{one_to_999_999})?|{one_to_999_999})" # end one_to_999_999_999 definition one_to_999_999_999_999 = fr"(?:{one_to_999}\sbillion(?:\s{one_to_999_999_999})?|{one_to_999_999_999})" # end one_to_999_999_999_999 definition one_to_999_999_999_999_999 = fr"(?:{one_to_999}\strillion(?:\s{one_to_999_999_999_999})?|{one_to_999_999_999_999})" # end one_to_999_999_999_999_999 definition bignumber = fr"(?:zero|{one_to_999_999_999_999_999})" # end bignumber definition zero_to_9 = fr"(?:{one_to_9}|zero)" # end zero to 9 definition decimals = fr"point(?:\s{zero_to_9})+" # end decimals definition numeral_pattern = fr"{bignumber}(?:\s{decimals})?" #print(numeral_pattern) rx = re.compile(numeral_pattern) text = "but two of them were fool saying twenty six nine seven twenty six then the seven thousand twenty three people and all the people saying is three two just one person said one thousand thirty three and three and two and seven three" print(rx.findall(text))
Standard input is empty
['two', 'twenty six', 'nine', 'seven', 'twenty six', 'seven thousand twenty three', 'three', 'two', 'one', 'one thousand thirty three', 'three', 'two', 'seven', 'three']