正则表达式在Java中提取标签值对
发布时间:2020-12-14 06:23:59 所属栏目:百科 来源:网络整理
导读:我有一个文件包含几行类似于: Name: PeterAddress: St. Serrano número 12,Espa?aCountry: Spain 我需要使用正则表达式提取地址,考虑到它可以包含点,特殊字符(?,?),áéíó… 目前的代码有效,但看起来很难看: Pattern p = Pattern.compile("^(.+?)Addres
我有一个文件包含几行类似于:
Name: Peter Address: St. Serrano número 12,Espa?a Country: Spain 我需要使用正则表达式提取地址,考虑到它可以包含点,特殊字符(?,?),áéíó… 目前的代码有效,但看起来很难看: Pattern p = Pattern.compile("^(.+?)Address: ([a-zA-Z0-9????áéíóú.,]+)(.+?)$",Pattern.MULTILINE | Pattern.DOTALL); Matcher m = p.matcher(content); if (m.matches()) { ... } 编辑:地址字段也可以分为多行 Name: Peter Address: St. Serrano número 12,Madrid Espa?a Country: Spain 编辑:我不能使用Properties对象或YAML解析器,因为该文件也包含其他类型的信息.
我不太了解Java的正则表达式对象,但像这样的模式会做到这一点:
^Address:s*((?:(?!^w+:).)+)$ 假设多线和dotall模式打开. 这将匹配以Address开头的任何行,后跟任何内容,直到换行符和单个单词后跟冒号. 如果你知道下一个字段必须是“Country”,你可以稍微简化一下: ^Address:s*((?:(?!^Country:).)+)$ 诀窍在于重复组中的先行断言. ‘(?!国家:).’将匹配除字符串’Country:’的开头之外的所有内容,因此我们只将其粘贴在非捕获括号中(?:…)并对其进行量化,然后将其全部分组到正常捕获括号中. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |