java regex在两个标记之间取变量

时间:2017-02-22 17:45:14

标签: java regex

我是正则表达式的新手,需要你的帮助。我想在两个跨度之间取数字和字母。

        <span>454.000 $</span>

我想要454.000美元。之前有12个空间。请帮帮我。

3 个答案:

答案 0 :(得分:0)

这应该有效。

正则表达式:

\s+<.+>(.+)<.+>

输入:

            <span>454.000 $</span>

输出:

454.000 $

JAVA CODE:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

final String regex = "\\s+<.+>(.+)<.+>";
final String string = "            <span>454.000 $</span>";

final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(string);

while (matcher.find()) {
    System.out.println("Full match: " + matcher.group(0));
    for (int i = 1; i <= matcher.groupCount(); i++) {
        System.out.println("Group " + i + ": " + matcher.group(i));
    }
}

请参阅:https://regex101.com/r/2zg5Ws/1

答案 1 :(得分:0)

您可以使用:

public static void main(String[] args) {
    String str = "        <span>454.000 $</span>";
    String start = "<span>", end = "</span>";
    String regexString = Pattern.quote(start) + "(.*?)" + Pattern.quote(end);
    Pattern pattern = Pattern.compile(regexString);
    Matcher matcher = pattern.matcher(str);

    while (matcher.find()) {
        System.out.println(matcher.group(1));
    }

}

这可以gwill给你:

454.000 $

答案 2 :(得分:0)

使用模式匹配捕获组如下所示

String x = "   <span>454.000 $</span>    ";
Pattern p = Pattern.compile("<span>(.*?)</span>");
Matcher m = p.matcher(x);
if (m.find()) {
    System.out.println(">> "+ m.group(1)); // output 454.000 $
}

但是对于这种情况,我总是喜欢使用replaceAll(),因为它是较短版本的代码:

String num = x.replaceAll(".*<span>(.*?)</span>.*", "$1");
// num has 454.000 $

对于替换,它实际上是从文本中捕获组并用该组替换整个文本($1)。此解决方案取决于输入字符串的方式。