当前位置:  开发笔记 > 编程语言 > 正文

正则表达式在Java中提取标签值对

如何解决《正则表达式在Java中提取标签值对》经验,为你挑选了1个好方法。

我有一个文件包含几行类似于:

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解析器,因为该文件也包含其他类型的信息.



1> ʞɔıu..:

我不太了解Java的正则表达式对象,但像这样的模式会做到这一点:

^Address:\s*((?:(?!^\w+:).)+)$

假设打开了多行和dotall模式.

这将匹配以Address开头的任何行,后跟任何内容,直到换行符和单个单词后跟冒号.

如果你知道下一个字段必须是"Country",你可以稍微简化一下:

^Address:\s*((?:(?!^Country:).)+)$

诀窍在于重复组中的先行断言.'(?!国家:).' 将匹配除字符串'Country:'的开头之外的所有内容,因此我们只将其粘贴在非捕获括号中(?:...)并用+量化它,然后将所有这些组合在正常捕获括号中.

推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有