我正在编写一个正则表达式(如果这很重要的话,在Java中使用),它试图匹配$之后的数字(可以是浮点数)(允许在$和数字之间隔开),但前提是紧接在它前面的单词不是‘Lost’.
如果有多个可能的匹配项,则应返回第一个数字.
为简单起见,假设所有字符均为大写.
例如,在下面的句子中:"我为啤wine 支付了10.12美元",10.12将被匹配.对于"我在游戏中输了11.34美元"这句话,将不会有匹配.对于"我在比赛中输了11.34美元,花了10.12美元买啤wine ",10.12仍然是匹配的.
我想出的正则表达式是
.*?(?<!LOST )[$]\s*(?<NUMBER>[0-9]*[.]?[0-9]*).*
我的正则表达式通常工作得很好,尽管我想知道是否有更简单的方法来编写它/我是否遗漏了任何大小写.一个小问题是,如果Lost和$之间有1个以上的空格,我仍然不想匹配,但目前我的正则表达式将匹配.不幸的是,消极的回顾必须有固定的宽度.
澄清:为了澄清,我所说的"前面的词不是‘迷失’"的意思是,在‘$’之前不能有‘迷失\S*’.这意味着‘Lost$123’和‘Lost$123’都不应该与123匹配,但‘Lost!$123’可以匹配123.理由是货币不应该直接被Lost‘作用’;如果在Lost和$之间有除了S之外的任何东西,那么货币很可能不会被Lost直接‘作用’.