-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*?)+

我已经用几个例子尝试了上面的方法,到目前为止还没有失败。

谁能想到更好的方法来实现这一目标?

4

2 回答 2

1

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

于 2012-12-22T18:29:04.637 回答
0

我建议对每个变体使用单独的表达式,并按顺序测试它们(最有可能首先测试它们),应用责任链模式。

优点是可维护性。当您需要支持新的变体时(考虑到您事先并不知道所有可能的变化),只需将另一个成员添加到链中,而不是摆弄您现在所构建的奥术复杂性。

于 2012-12-22T18:31:46.517 回答