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

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


如果两个标签都在一行上,这将获取我需要的数据。我的问题是处理以下几行:

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


如果标签中间有裂痕,则无法正常工作。因此,我正在寻求帮助来改善我的正则表达式,或与非标准xml标记一起使用的替代方法。

最佳答案

您需要Pattern.DOTALL开关,并且要有一个空格("\\s+")而不是文字空间的匹配项:

Pattern.compile("<(?:TIMEX\\s+TYPE|ENAMEX\\s+TYPE)=.+?>(.+?)</(?:TIMEX|ENAMEX)>", Pattern.DOTALL);


此开关的javadoc摘录解释了DOTALL开关:


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


还要注意,尽管它的名字,Pattern.MULTILINE开关在这里对您没有帮助。

07-26 07:24