括号内的模式匹配与%sybol

时间:2018-10-02 11:24:03

标签: java regex

我是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);

如果有人可以提供一些建议,我将不胜感激。

谢谢

3 个答案:

答案 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);之前的数字,则以下内容将匹配

%

demo

编辑:

根据您的评论,我了解到问题出在确定要挑选的正确人群。在此正则表达式中,需要在组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文件中的数据,因此我将脱机以查看发生了什么,但两种建议都奏效。

谢谢您的时间。我很感激。

此致

保罗