我有以下代码:
Matcher title = Pattern.compile("<Title> (.+?)</Title>").matcher(epg); // for new dongle setup
//Matcher title = Pattern.compile("<Title> \"(.+?)\"</Title>").matcher(epg); // for old dongle setup
我有一个字符串形式的xml响应,我正在寻找解析到matcher对象。标题将采用以下格式:
<Title> "The Ellen DeGeneres Show"</Title>
或此格式:
<Title> The Ellen DeGeneres Show</Title>
所以基本上它是引号的差异。在选择使用哪种方法之前,如何使if语句检查。总结一下
if(pattern is with quotation marks){
Matcher title = Pattern.compile("<Title> \"(.+?)\"</Title>").matcher(epg);
} else if (pattern is without quotation marks){
Matcher title = Pattern.compile("<Title> (.+?)</Title>").matcher(epg)
}
我无法理解if语句中的内容。
答案 0 :(得分:2)
根据@UrosK的建议,我查找了如何在Regex中使字符可选。事实证明我必须在我希望成为可选字符之后添加一个问号。现在我的陈述如下:
Matcher title = Pattern.compile("<Title> \"?(.+?)\"?</Title>").matcher(epg);
答案 1 :(得分:1)
你可以试试
Matcher title = Pattern.compile("<Title>\\s*\"?([^\"]*)\"?</Title>").matcher(epg);
在开始标记之后允许任意数量的空格(\ s)。
答案 2 :(得分:1)
尝试为两种情况编写正则表达式,然后使用|
运算符将它们连接起来。
以下是我的代码:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexOptionalQuotationMarks {
public static void main(String[] args) {
String[] input = {
"<Title> \"The Ellen DeGeneres Show\"</Title>"
, "<Title> The Ellen DeGeneres Show</Title>"
};
String regexWithoutQm = "<Title>\\s*\\w[^<]*</Title>";
String regexWithQm = "<Title>\\s*\"[^\"<]*\"\\s*</Title>";
String regexBoth = regexWithoutQm + "|" + regexWithQm;
Pattern p = Pattern.compile(regexBoth);
for (String s : input) {
Matcher m = p.matcher(s);
System.out.format("matching input %s ... %b%n", s, m.find());
}
}
}
这个程序的输出是:
matching input <Title> "The Ellen DeGeneres Show"</Title> ... true
matching input <Title> The Ellen DeGeneres Show</Title> ... true
答案 3 :(得分:1)
尝试使用此代码:
ListBox2.ListCount
查找&#34;标题&#34;首先是节点,然后检查其内容是否为模式