3

我需要从服务器响应数据中删除一些单词。

使用我得到的正则表达式提取器

<span class="snippet_word">Działalność</span> <span class="snippet_word">lecznicza</span>.</a>

我只需要:“Działalność lecznicza”

所以我在 Beanshell 中编写了一个应该这样做的程序,但有一个问题,因为我得到了

"莱茨尼查莱茨尼查"

这是我的程序:

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

String pattern = "\\w+(?=\\<)";
String co = vars.get("tresc");
int len  = Integer.parseInt(vars.get("length"));
String phrase="";
StringBuffer sb = new StringBuffer();

Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(co);

for(i=0; i < len ;i++){
if (m.find()){
strbuf = new StringBuffer(m.group(0));
} 
else {
phrase="notfound";
}

sb.append(" ");
sb.append(strbuf);
}

phrase = sb.toString();

return phrase;

tresc - 是我提取模式词的来源。长度 - 告诉我要提取多少字。

程序适用于没有国家字符的短语。这就是为什么我认为编码或这里的某个地方存在一些问题:

Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(co);

但我不知道如何更改我的代码。

4

1 回答 1

2

\w与 unicode 不匹配。要匹配正则表达式中的 unicode,您可以使用\p{L}

String pattern = "\\p{L}+(?=\\<)";

尽管对于此类工作,我建议使用 XML 解析器,因为正则表达式完全不适合解析 HTML/XML,如本文所述

于 2013-05-23T13:51:20.233 回答