正则表达式查找单词形式的大数字

Gun*_*her 2 python regex

我正在尝试从字符串中提取单词形式的数字。例如,输入字符串可能类似于:

"What is 3 million 6 hundred 5 divided by 5 hundred?"
Run Code Online (Sandbox Code Playgroud)

根据这个输入,我想弄清楚如何将这两个数字分组。

["3 million 6 hundred 5", "5 hundred"]
Run Code Online (Sandbox Code Playgroud)

注意:在其他输入字符串中可能会找到更多数字。

我相信正则表达式是解决这个问题的正确途径。理想情况下,我可以传递一个比例列表,例如:

["hundred", "thousand", "million", "billion", ...]
Run Code Online (Sandbox Code Playgroud)

到目前为止,这就是我所拥有的:

scales= ["hundred", "thousand", "million", "billion"]
scale_pattern = '|'.join(scales)
regex = re.compile('\b(d+' + scale_pattern + 'd+)+\b')
Run Code Online (Sandbox Code Playgroud)

我知道我的模式不太正确,我想要的伪代码是:

for any number of the following occurrences:
    find the pattern [int word_from_list optional_int]
Run Code Online (Sandbox Code Playgroud)

Rah*_*hul 5

理想情况下我可以传递一个比例列表

您可以像这样将它们传递到非捕获组或捕获组中。

正则表达式: (?:\d+\s(?:million|hundred|thousand|billion)*\s*)+

上面是一个简单的正则表达式,检查数字\d+后跟空格\s比例,对于最后一个数字后跟可选空格,比例是可选的(通过使用*量词)。整个模式重复一次或多次(通过使用+量词)。

Regex101 演示