正则表达找钱的价值

问题描述 投票:0回答:5

我有回复文字:

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])";

但它不起作用。请帮我!

java regex
5个回答
3
投票

在VND (?=之后,你可以使用正面的前瞻\b和一个单词边界。

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

Regex demo

那会匹配

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

在Java中:

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

Demo Java


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));
}

1
投票

解:

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

描述:

  1. 您应该在每个VND字符串之前创建组
  2. 在小组内首先你应该检查是否有减号,所以有: - ?
  3. 我们需要捕获每个数字,我们期望有一个或多个:所以[0-9] +
  4. 在小数的情况下可能有一个点符号(零或一)。所以我们有[。] +
  5. 再次,您可能在十进制(零或更多)之后有另一系列数字,所以:[0-9] *

1
投票

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

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

想法是你需要至少一个数字,然后是更多的数字或小数,然后是VND。

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

Online Example


0
投票

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

在Java中

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

正则表达式

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

regex sample

© www.soinside.com 2019 - 2024. All rights reserved.