我有一个看起来像下面带有标签行的文件。我有:
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
开关在这里对您没有帮助。