我可以多次匹配正则表达式中的或表达式吗?

时间:2018-09-19 04:43:08

标签: python regex

我想知道是否有可能检测到

的正则表达式
  1. 或语句的单词组合
  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美元/美元,20,000美元,$ 1.5

以及

  

五百美元'

您明白了。

我想知道是否可以使它工作,以便能够识别

  

九十五美元

(第二点)(清单上有九个和五个,但我也不知道如何计算破折号。

还有类似

  

10加元

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

  

美元

我发现regex101对于查看正则表达式及其效果非常有用,但是我无法弄清楚

1 个答案:

答案 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