查找货币价值的正则表达式

时间:2018-09-01 07:16:24

标签: java regex

我有回复文本:

Cuoc no truoc -2.134VND. Cuoc phat sinh tam tinh den 31/08/2018:
3`2.666VND (da tru KM,goi cuoc...). TKFastpay: 0VND.Tra 01.Trang sau 02.Thoat\",15

我想要得到的结果是"VND" -> -2.13432.6660之前的金钱价值。

我有正则表达式

String regex = "(?<![^=])([\\d]*)(?!$[VND])";

,但不起作用。 请帮帮我!

5 个答案:

答案 0 :(得分:3)

您可以使用正向前瞻(?=,并在VND \b之后使用单词边界。

-?\d+(?:\.\d+)?(?=VND\b)

Regex demo

那会匹配

  • -?可选的减号(要同时允许加号,可以使用可选的字符类[+-]?
  • \d+匹配一个或多个数字
  • (?:\.\d+)?一个可选的非捕获组,匹配点和一个或多个数字
  • (?=VND\b)肯定右边的肯定是VND

在Java中:

-?\\d+(?:\\.\\d+)?(?=VND\\b)

Demo Java

答案 1 :(得分:2)

您可以提前使用此正则表达式:

[+-]?\d+\.?\d*(?=VND)

RegEx Demo

RegEx详细信息:

  • [+-]?:匹配可选的+-
  • \d+\.?\d*:匹配浮点数或整数
  • (?=VND):断言我们下一个位置有VND

Java代码:

final String regex = "[+-]?\\d+\\.?\\d*(?=VND)";
final String string = "Cuoc no truoc -2.134VND. Cuoc phat sinh tam tinh den 31/08/2018:\n"
+ "32.666VND (da tru KM,goi cuoc...). TKFastpay: 0VND.Tra 01.Trang sau 02.Thoat\\\",15";

final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(string);

while (matcher.find()) {
    System.out.println(matcher.group(0));
}

答案 2 :(得分:1)

如果我理解要求,那么重复使用的正则表达式可能是:

(-?)[\\d][\\d.]*(?=VND)

这个想法是,您需要至少一个数字,然后是更多数字或十进制,然后是VND。

稍微改进的方法是将[。]分割成数字,因此:     ((-?)[\ d] + [。]?[\ d] *)(?= VND)

Online Example

答案 3 :(得分:1)

解决方案:

String regex = "(-?[0-9]+[\.]+[0-9]*)VND"

说明:

  1. 您应在每个VND字符串之前创建组
  2. 首先要在小组内部检查负号是否可用:-?
  3. 我们需要捕获每个数字,并且期望有一个或多个:所以[0-9] +
  4. 对于十进制,可能有一个点号(零或一个)。所以我们有[。] +
  5. 同样,在小数点(零个或多个)之后,您可能还会有其他一系列数字,因此:[0-9] *

答案 4 :(得分:0)

尝试这个简单的正则表达式

在Java中

String regex = "(-?\\d*?\\.?\\d+)(?=VND)";

regex

(-?\d*?\.?\d+)(?=VND)

请参阅regex sample