我正在尝试创建一个与金额匹配的正则表达式(在给定金额之前或之后的各种货币。小数点之间用点号或逗号分隔)。
这是到目前为止我得到的:
\ $ [0-9。,] + | \£[0-9。,] + | \€[0-9。,] +
但是,如果我将货币与其他符号一起放在方括号中,它将无法正常运行(它仍然无法匹配20,000 $,只有20,000美元,并且我希望两者都匹配)。< / p>
您能告诉我如何修改我的正则表达式,使它也与数字后的货币匹配吗?
此外,是否是在正则表达式中包含多个货币以用管道将它们分开并一遍又一遍重写相同的正则表达式的唯一方法?
答案 0 :(得分:1)
此正则表达式应匹配带小数点分隔符(零个或多个)和小数点(零个或一个)的数字:
(?:\d{1,3},)*\d{1,3}(?:\.\d+)?
对于您的用例,您应该对this regex感到满意:
[\$£€](?:\d{1,3},)*\d{1,3}(?:\.\d/{1,2})?|(?:\d{1,3},)*\d{1,3}(?:\.\d{1,2})?[\$£€]
在正则表达式中(至少据我所知)没有办法允许您交换两组字符的顺序,因此您必须将其指定为“ AB或BA”。
希望,这对您有用:
[\$\£\€]\d+(?:[.,]\d+)?|\d+(?:[.,]\d+)?[\$\£\€]
\d+(?:[.,]\d+)?
部分可以简化为[\d.,]+
。正则表达式最简单的方法(丢失了大量信息)是:
[\$£€]?[\d.,]+[\$£€]?
...但是这允许很多错误的输入,例如20.$
或$.,€
或简单的5
。