在Java中获取文本beetwen字符,正则表达式

时间:2017-02-21 15:33:41

标签: java regex string

我想获取文字beetwen标记"<p>""</p>" 例如我有: String stringText = "<html><head></head><body><p>Aa , aa.</p><p><b>Aa aa, aa.</b></p><p>Aa aa aa, aa.</p><p><i>Aa, aa.</i></p><p><b><i>B, b, b.</i></b></p><b>Aa aa, aa.</b></body></html>"; 我只想得到这个:

"Aa aa Aa aa aa Aa aa aa aa Aa aa B b b " 

没有昏迷和dot.And我希望每个单词都在String数组中,因为接下来我必须计算每个单词;

我也找到了一些例子,但我不知道我要写入Pattern.compile

private static final Pattern TAG_REGEX = Pattern.compile("<p>(.+?)</p>");
private static List<String> getTagValues(final String str) {
    final List<String> tagValues = new ArrayList<String>();
    final Matcher matcher = TAG_REGEX.matcher(str);
    while (matcher.find()) {
        tagValues.add(matcher.group(1));
    }
    return tagValues;
}

在我的程序中:

System.out.println(Arrays.toString(getTagValues(stringText).toArray()));

但它无法正常工作,任何人都知道我必须在Pattern.compile("");写些什么? 现在我明白了:

[Aa, aa., <b>Aa aa, aa.</b></p><p>Aa aa aa, aa., <i>Aa, aa.</i></p><p><b><i>B, b, b.</i></b></p><b>Aa aa, aa.</b><p>]

1 个答案:

答案 0 :(得分:0)

既然你尝试了一些东西,我们终于可以帮到你了。我做的第一件事是删除所有现有的标签,即每<xyz>。那么你只剩下想要计算的文本了。下一步是拥有一个合适的拆分运算符。我选择用逗号和点作为分裂点。我知道它不是最好的方式,就像我做的那样,但我无法想出一个好的正则表达式来替换逗号所需的每个空格和点。删除标签后,字符串如下所示:  Aa , aa.Aa aa, aa.Aa aa aa, aa.Aa, aa.B, b, b.Aa aa, aa. 用逗号替换一些空格后,它看起来像这样: Aa,,,aa.Aa,aa,,aa.Aa,aa,aa,,aa.Aa,,aa.B,,b,,b.Aa,aa,,aa. 现在我们在每个逗号和点分割String。由于我们有一些地方,其中几个逗号相继出现,我们在数组中有空条目。在计数时,我们忽略带有if的空条目。 .trim()是为了确保没有带有空格的条目可能会扭曲结果。

public static void main(String[] args) {
    String stringText = "<html><head></head><body><p>Aa , aa.</p><p><b>Aa aa, aa.</b></p><p>Aa aa aa, aa.</p><p><i>Aa, aa.</i></p><p><b><i>B, b, b.</i></b></p><b>Aa aa, aa.</b></body></html>";
    stringText = stringText.replaceAll("\\<\\w+\\>|\\<\\/\\w+\\>", "");
    stringText = stringText.replaceAll(" ", ",");
    String[] h = stringText.split(",|\\.");
    int counter = 0;
    for (String str : h) {
        if (!str.trim().isEmpty()) {
            counter++;
        }
    }
    System.out.println(counter);

}