我有回复文字:
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.134
和32.666
和0
之前获得结果是金钱的价值。
我有正则表达式
String regex = "(?<![^=])([\\d]*)(?!$[VND])";
但它不起作用。请帮我!
在VND (?=
之后,你可以使用正面的前瞻\b
和一个单词边界。
-?\d+(?:\.\d+)?(?=VND\b)
那会匹配
-?
可选的减号(也允许加号,你可以使用一个可选的字符类[+-]?
\d+
匹配一个或多个数字(?:\.\d+)?
匹配点和一个或多个数字的可选非捕获组(?=VND\b)
肯定右边的正面先行是VND
在Java中:
-?\\d+(?:\\.\\d+)?(?=VND\\b)
你可以使用这个正则表达式前瞻:
[+-]?\d+\.?\d*(?=VND)
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));
}
String regex = "(-?[0-9]+[\.]+[0-9]*)VND"
如果我理解了这个要求,那么以重复方式使用的正则表达式可能是:
(-?)[\\d][\\d.]*(?=VND)
想法是你需要至少一个数字,然后是更多的数字或小数,然后是VND。
稍微改进的方法是将[。]分割成数字之间,所以:(( - ?)[\ d] + [。]?[\ d] *)(?= VND)
试试这个简单的正则表达式
在Java中
String regex = "(-?\\d*?\\.?\\d+)(?=VND)";
正则表达式
(-?\d*?\.?\d+)(?=VND)