我是Java的新手,一直在尝试用百分比符号对TD标签和方括号中的某些数据进行模式匹配,但由于我的一生无法使其正常工作。
我确信这非常简单,我只想在此处提取%符号前的数字:
<td>0 items (0%)</td>
我尝试了很多建议,但似乎都没有用。
linecache = readercache.readLine();
System.out.println(linecache);
Pattern patterncf1 = Pattern.compile("\\((.*?)\\)");
tried
Pattern patterncf1 = Pattern.compile("<td>\\d+ \\w+ \\((\\d+)?%\\)</td>");
tried
Pattern patterncf1 = Pattern.compile("<td>\\((\\d+)?%\\)</td>");
tried
Pattern patterncf1 = Pattern.compile("\\((\\d+)?%\\)");
但我总是得到
<td>0 items (0%)</td>
线程“ Thread-0”中的异常java.lang.IllegalStateException:找不到匹配项
我也尝试了以下建议,但仍然出错,我认为在这种情况下这是正确的小组。
linecache = readercache.readLine();
System.out.println(linecache);
String pattern = "\\d+(?=%)";
Pattern patterncf1 = Pattern.compile(pattern)
Matcher matchercf1 = patterncf1.matcher(linecache);
String passedvalue = matchercf1.group(1);
System.out.println(passedvalue);
这部分代码的另一部分工作正常。
Pattern patternmb1 = Pattern.compile("<td>(.+?) GB</td>");
Matcher matchermb1 = patternmb1.matcher(line);
if (matchermb1.find()) {
String passedvalue = matchermb1.group(1);
String[] tmpStr = passedvalue.split("\\.") ;
String withoutDecStr = tmpStr[0];
Float passedvalue2 = Float.valueOf(withoutDecStr);
System.out.println("MIU: " + passedvalue2);
JVMinusearray.add(passedvalue2);
如果有人可以提供一些建议,我将不胜感激。
谢谢
答案 0 :(得分:0)
如果您要提取var freq = { a: 50, r: 25, m: 25 };
/*
dps = [
{ label: "a",
y: 50 },
{ label: "r",
y: 25 },
{ label: "m",
y: 25 }
];
*/
var dps = [];
var keys = Object.keys(freq);
keys.map((current,index)=>{
dps.push({label:keys[index], y:freq[keys[index]]});
});
console.log(dps);
之前的数字,则以下内容将匹配
%
编辑:
根据您的评论,我了解到问题出在确定要挑选的正确人群。在此正则表达式中,需要在组1中使用什么,必须使用group1使其起作用。
(\\d+(?=%))
答案 1 :(得分:0)
您可以使用以下内容:
Pattern pattern = Pattern.compile("<td>.*\\((\\d+)%\\)</td>");
Matcher matcher = pattern.matcher("<td>0 items (2000%)</td>");
if(matcher.matches()) {
System.out.println(matcher.group(1));
}
您将获得附加到%
上的数字。
答案 2 :(得分:0)
感谢您的帮助。它似乎可以处理静态字符串,但不能读取html文件中的数据,因此我将脱机以查看发生了什么,但两种建议都奏效。
谢谢您的时间。我很感激。
此致
保罗