如何检查某个Pattern是否在xml响应的字符串表示中?

时间:2017-01-03 22:25:23

标签: java regex

我有以下代码:

        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语句中的内容。

4 个答案:

答案 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;首先是节点,然后检查其内容是否为模式