我可以多次匹配regex中的or表达式吗?

2024-06-02 05:39:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道是否有可能有一个正则表达式可以检测

  1. or语句的单词组合
  2. 单词组合,如果它们之间有不同的单词或符号

    我有以下正则表达式:

    (\$[\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 dollars / dollar, 20,000 dollars, $1.5

,以及

five hundred dollars'

你明白了。你知道吗

我想知道我是否可以让它工作,以便能够确定像这样的东西

ninety-five dollars

(第二点)(9和5都在名单上,但我也不知道如何计算破折号。你知道吗

像这样的

10 Canadian dollars

(第1点) 只是\w不起作用,因为它会捕获“美元”前面可能不需要的单词,例如

strong dollar

我发现regex101对于查看regex及其效果非常有用,但是我无法理解它


Tags: or单词fourfivethousandhundredsixseven
1条回答
网友
1楼 · 发布于 2024-06-02 05:39:30

所有你需要的是添加一个破折号到字符集后面的大组有。当前为[\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

相关问题 更多 >