我有回复文本:
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])";
,但不起作用。 请帮帮我!
答案 0 :(得分:3)
您可以使用正向前瞻(?=
,并在VND \b
之后使用单词边界。
-?\d+(?:\.\d+)?(?=VND\b)
那会匹配
-?
可选的减号(要同时允许加号,可以使用可选的字符类[+-]?
\d+
匹配一个或多个数字(?:\.\d+)?
一个可选的非捕获组,匹配点和一个或多个数字(?=VND\b)
肯定右边的肯定是VND
在Java中:
-?\\d+(?:\\.\\d+)?(?=VND\\b)
答案 1 :(得分:2)
您可以提前使用此正则表达式:
[+-]?\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));
}
答案 2 :(得分:1)
如果我理解要求,那么重复使用的正则表达式可能是:
(-?)[\\d][\\d.]*(?=VND)
这个想法是,您需要至少一个数字,然后是更多数字或十进制,然后是VND。
稍微改进的方法是将[。]分割成数字,因此: ((-?)[\ d] + [。]?[\ d] *)(?= VND)
答案 3 :(得分:1)
String regex = "(-?[0-9]+[\.]+[0-9]*)VND"
答案 4 :(得分:0)
尝试这个简单的正则表达式
在Java中
String regex = "(-?\\d*?\\.?\\d+)(?=VND)";
regex
(-?\d*?\.?\d+)(?=VND)
请参阅regex sample