我正试着扫描一个字符串中的任何单词组合。具体来说,我想找到任何“数字词”组合,如“二百八十”或“五十八”。
为了做到这一点,我列出了一个单数字,最多有一百万个:

numberWords = ["one", "two", "three", ...... "hundred", "thousand", "million"]

然后我使用“”将列表连接在一起,并生成了这样的正则表达式:
string.scan(/\b(#{wordList}(\s|\.|,|\?|\!))+/)

我希望它返回一个包含所有数字-单词组合的列表,但它只单独返回单词。例如,如果字符串中有“300万”,则返回“3”和“百万”,但不返回“300万”。如何更正?

最佳答案

numberWords = ["one", "two", "three", "hundred", "thousand", "million"]
numberWords = Regexp.union(numberWords)
# => /one|two|three|hundred|thousand|million/

"foo bar three million dollars"
.scan(/\b#{numberWords}(?:(?:\s+and\s+|\s+)#{numberWords})*\b/)
# => ["three million"]

07-25 21:30