Java 正则表达式帮助还是替代方案

Java 正则表达式帮助还是替代方案,java,Java,我有一个文件,看起来像下面的标签行。我有: Pattern.compile("<(?:TIMEX TYPE|ENAMEX TYPE)=.+?>(.+?)</(?:TIMEX|ENAMEX)>"); Pattern.compile((.+?)”; 如果两个标记都在一行上,那么这将获取所需的数据。我的问题是处理以下几行: <ENAMEX TYPE="CITED">1</ENAMEX> 1 如果标签中间有一个分裂,它就不能正常工作。因此,我正在寻

我有一个文件,看起来像下面的标签行。我有:

Pattern.compile("<(?:TIMEX TYPE|ENAMEX TYPE)=.+?>(.+?)</(?:TIMEX|ENAMEX)>");
Pattern.compile((.+?)”;
如果两个标记都在一行上,那么这将获取所需的数据。我的问题是处理以下几行:

<ENAMEX
TYPE="CITED">1</ENAMEX>
1

如果标签中间有一个分裂,它就不能正常工作。因此,我正在寻找帮助,以改进我的正则表达式,或者寻找一种可用于非标准xml标记的替代方法。

您需要切换,并匹配空格(
“\\s+”
),而不是文字空间:

Pattern.compile("<(?:TIMEX\\s+TYPE|ENAMEX\\s+TYPE)=.+?>(.+?)</(?:TIMEX|ENAMEX)>", Pattern.DOTALL);
Pattern.compile((.+?)”,Pattern.DOTALL);
此开关的javadoc摘录解释了
DOTALL
开关:

在dotall模式下,表达式。匹配任何字符,包括行终止符


还要注意的是,尽管名称不同,该开关在这里对您没有帮助。

与其查找“”(单个空格),为什么不多次查找任何空格?应该类似于“\s+”。

只是通过示例为您提供了一个备选方案。模式匹配之前的搜索替换可以帮助您

    final static String NEWLINE = "\n";
    final static String SPACE = " ";

public static void main(String[] args) {

            String s = "<ENAMEX\n TYPE=\"CITED\">1</ENAMEX>";

    Pattern pattern = Pattern.compile("<(?:TIMEX TYPE|ENAMEX TYPE)=.+?>(.+?)</(?:TIMEX|ENAMEX)>");

            s = s.replaceAll(NEWLINE, SPACE);

            Matcher matcher = pattern.matcher(s);

    while (matcher.find()) {
        System.out.println("Start index: " + matcher.start());
        System.out.println("End index: " + matcher.end());
    }
}
最终静态字符串换行符=“\n”;
最终静态字符串空间=”;
公共静态void main(字符串[]args){
字符串s=“1”;
Pattern=Pattern.compile(“(.+?)”);
s=s.replaceAll(换行符,空格);
匹配器匹配器=模式匹配器;
while(matcher.find()){
System.out.println(“开始索引:+matcher.Start());
System.out.println(“结束索引:+matcher.End());
}
}

,但他不是对
有意见。他有一个换行符,他的正则表达式需要一个空格。我试过了,但它并没有解决问题。它没有任何作用,新的线路给我带来了各种各样的问题。是的,新行而不是空格,我不知道如何解决。@JamesMontagne你是对的(尽管他仍然需要开关!)答案已编辑。