我正在尝试从字符串中提取单词形式的数字。例如,输入字符串可能类似于:
"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)
理想情况下我可以传递一个比例列表
您可以像这样将它们传递到非捕获组或捕获组中。
正则表达式: (?:\d+\s(?:million|hundred|thousand|billion)*\s*)+
上面是一个简单的正则表达式,检查数字\d+后跟空格\s和比例,对于最后一个数字后跟可选空格,比例是可选的(通过使用*量词)。整个模式重复一次或多次(通过使用+量词)。
| 归档时间: |
|
| 查看次数: |
502 次 |
| 最近记录: |