<lst name="responseHeader"><int name="status">0</int><int name="T">2</int><lst name="params"><str name="echoParams">all</str><str name="Params">all</str>solrpingquery<str name="ty">standard</str></lst></lst><str name="status">OK</str>
以上是我要解析的行,我想从上面的行中提取确定。从下面的特定字符串中我想提取确定。 确定可以是任何内容,并非强制要求状态确定。
<str name="status">OK</str>
快速的方法是什么。
答案 0 :(得分:1)
看起来像有效的XML,所以我建议使用一个XML解析器(很难说哪一个,因为你没有说你正在使用哪种语言)。
正则表达式看起来像
<str name="status">(.*?)</str>
或
<str name="status">([^<>]*)</str>
但您仍然需要指定您正在使用的语言,因此我可以根据需要调整正则表达式。尝试匹配(X)ML与正则表达式有几个问题,因此它可能并不总是按预期工作。只要标签之间只有普通文本,就应该没问题。
在Java中:
Pattern regex = Pattern.compile("<str name=\"status\">(.*?)</str>");
Matcher regexMatcher = regex.matcher(subjectString);
if (regexMatcher.find()) {
ResultString = regexMatcher.group(1);
}
答案 1 :(得分:0)
我不得不承认,当它是矫枉过正时我是反XML和反正则表达式。 <怎么样
static final String SEARCH_STRING = "<str name=\"status\">";
然后,某处
int idx1 = theString.indexOf(SEARCH_STRING );
int idx2 = theString.indexOf("<", idx1+1 );
// verify that both are >= 0;
String result = theString.substring(idx1 +SEARCH_STRING.length(), idx2);
注意 - 我很确定该代码中某处有一个off-1错误,所以请检查它。