2012-12-22 32 views
-2

我正在研究一个正则表达式,它会以不同的格式获取价格,因为我不知道以哪种格式获取字符串,所以我试图覆盖尽可能多的变体正则表达式 - 发现价格

这里是我想出了

\$\s*?(\d+\.?\d*?)+|usd\s*?(\d+\.?\d*?)+|(\d+\.?\d*?)\s*?usd+|(\d+\.?\d*?)\s*?dollars?+|dollars?\s*?(\d+\.?\d*?)+|(\d+\.?\d*?)\s*?bucks?+|bucks?\s*?(\d+\.?\d*?)+ 

我尝试了上面几个例子,并没有到目前为止失败。

任何人都可以想到一个更好的方法来实现这一目标?

+0

您如何收录您期望的输入样本? – fge

+0

输入是完全随机的,所以我不能给出具体的例子 –

+0

然后你唯一能做的就是想想你想要捕获什么情况并忽略这些罕见的情况。 – nhahtdh

回答

1

这里真正的答案是通过归一化的数据来实现。首先删除除数字之外的所有字符,圆点和(如果您期望负值)连字符。然后你将有一个可以用作数字的字符串。当您有一些可用的测试数据时,请在尝试编写正则表达式之前先尝试规范化。代码不仅易于编写,而且运行速度也会更快!

0

我会建议为每个变体使用单独的表达式,然后依次测试它们(最可能是第一个),然后应用响应模式链。

优点是可维护性。当你需要支持一个新的变体时(考虑到你事先并不知道所有可能的变体),它只是增加另一个成员到链中,而不是摆脱你现在建立的复杂的奥妙。