我想知道是否有可能检测到
的正则表达式单词组合,如果它们之间有不同的单词或符号
我有以下正则表达式:
(\$[\s]?([\d\,]+)([\.\d*](\d*))?([\s]?(hundred|thousand|million|billion|trillion))?)|((((one|two|three|four|four|five|five|six|six|seven|seven|eight|eight|nine|ten|eleven|twelve|thirteen|fourteen|fifteen|sixteen|eighteen|nineteen|twenty|thirty|forty|fifty|sixty|seventy|eighty|ninety|hundred|third|quarter|fifth|half|hundred|thousand|million|billion|trillion)[\s]?)+)?([\d\.\,\"a"]+)?([\s]*(dollars|dollar|USD)))
这应该确定美元金额的所有可能“类型”,例如:
$ 1.5美元/美元,20,000美元,$ 1.5
以及
五百美元'
您明白了。
我想知道是否可以使它工作,以便能够识别
九十五美元
(第二点)(清单上有九个和五个,但我也不知道如何计算破折号。
还有类似
10加元
(第一点)
只是\w
不起作用,因为它将捕获可能不需要的“美元”之前的单词,例如
美元
我发现regex101对于查看正则表达式及其效果非常有用,但是我无法弄清楚
答案 0 :(得分:0)
您需要做的是在该字符组后面的字符集中添加一个破折号。当前是[\s]
;将其更改为[\s-]
:
(\$[\s]?([\d\,]+)([\.\d*](\d*))?([\s]?(hundred|thousand|million|billion|trillion))?)|((((one|two|three|four|four|five|five|six|six|seven|seven|eight|eight|nine|ten|eleven|twelve|thirteen|fourteen|fifteen|sixteen|eightteen|nineteen|twenty|thirty|forty|fifty|sixty|seventy|eighty|ninety|hundred|third|quarter|fifth|half|hundred|thousand|million|billion|trillion)[\s-]?)+)?([\d\.\,\"a"]+)?([\s]*(dollars|dollar|USD)))
^
https://regex101.com/r/1TQLf2/
要匹配“ ...加拿大元”和“ ...美元”,请将“加拿大元”添加到当前的(dollars|dollar|USD)
组中。更改为
(Canadian dollars|dollars|dollar|USD)
(如果您不使用([Cc]anadian dollars|...
,则可能是/i
)