正则表达式找到第一次出现的价格

时间:2017-04-21 03:24:51

标签: regex

我需要从下面的字符串中提取94.00

我会使用哪个正则表达式?我目前的[^$]+$正则表达式正在返回$99.00 (176)

5 Easy Payments $94.00 $99.00 (176)

2 个答案:

答案 0 :(得分:2)

您似乎可能想要使用此正则表达式:

let g:UltiSnipsSnippetDirectories=["UltiSnips"]

这符合所有价格,因此根据您的语言,juse使用该函数来获得第一次出现的价格。但是,这也会像\$[\d.]+那样荒谬可笑。

$......只会将\$[\d]+\.[\d]+格式的价格与任意位数匹配。

$123.456将匹配价格中最后一位数字的所有内容。这在当前状态下是无用的,因为它为您的测试字符串返回^[^$]+\$[\d]+\.[\d]+

5 Easy Payments $94.00将与上述相同,但正则表达式的第1组将是价格^[^$]+(\$[\d]+\.[\d]+)。如果您只想匹配数字本身,请将左括号移开,使其变为$94.00

问题是如果在第一个有效价格之前的某个地方存在非价格美元符号,则不返回任何匹配项。只要这不是问题,那么^[^$]+\$([\d]+\.[\d]+)会为Capture Group 1提供^[^\$]+\$([\d]+\.[\d]+)

答案 1 :(得分:1)

如果你不能使用任何正常的编程方法来控制你得到的匹配数量,你需要使用捕获机制:

/(\$\d+(?:\.\d+)?)[\s\S]*/

此正则表达式找到第一个(因为任何正则表达式引擎从左到右处理字符串,至少在默认情况下是这样)$ + 1 or more digits + an optional sequence of '.' and 1 or more digits捕获此文本进入第1组(使用(\$\d+(?:\.\d+)?)),然后匹配使用[\s\S]*消耗字符串的其余部分(任意0或更多的角色)。

Your value is in Group 1

enter image description here