一个简单的问题我无法找到任何不推荐使用外部库的类似示例,我有一个练习,其中我们有类似于HTML / XML的模拟数据,我们仅限于使用Java正则表达式库来解析和操纵它。 我们希望将数据转换为地图。格式为:
<key> data words here </key>...
...其中每个数据字将分别添加到地图中,因此生成的地图应如下所示:
{key, data
key, words
key, here}
我提出了一些解决方案,首先使用正则表达式找到并存储密钥,然后匹配密钥标记的内部,将该数据存储在字符串中,使用空格和括号分隔符对其进行标记,然后循环遍历结果列表写入地图。有没有更直接或更优雅的方法来实现这一点,我可以使用正则表达式捕获密钥和数据字的数组/列表,并消除使用标记化器?
下面的一些示例数据(请注意,没有嵌套标签使得这比解析HTML简单得多):
<author> A. Cau, R. Kuiper, and W.-P. de Roever. </author>
<title> Formalising Dijkstra's development strategy within Stark's formalism. </title>
<editor> In C. B. Jones, R. C. Shaw, and T. Denvir, editors, </editor>
<booktitle> Proc. 5th. BCS-FACS Refinement Workshop, </booktitle>
<date> 1992. </date>
(所有在一行 - 添加了换行符以便于阅读)
答案 0 :(得分:1)
如果我理解正确,以下正则表达式会在组\1
或\2
中捕获标记名称及其值:
<([^>/]+)>(.*?)</\1>
<强> EXPLAINED 强>
<
- 字面匹配<
([^>/]+)
- 匹配并捕获非>
或/
的所有内容,以避免关闭代码
>
- 字面匹配>
(.*?)
- 匹配并捕捉任何非贪婪的内容
</\1>
- 匹配结束标记