有个写好的正则表达式,怎么加个判断有没有换行的呢?

charlesxu 2013-12-30 01:50:31
字符串如下:
String detail = "<Detail><Info><fieldInfo><fieldChName>人名</fieldChName><fieldEnName>name</fieldEnName><fieldContent>张三</fieldContent></fieldInfo><fieldInfo><fieldChName>地址</fieldChName><fieldEnName>address</fieldEnName><fieldContent>北京市朝阳区</fieldContent></fieldInfo><fieldInfo><fieldChName>电话</fieldChName><fieldEnName>Phone</fieldEnName><fieldContent>13980898675</fieldContent></fieldInfo><fieldInfo></Info></Detail>";

String key_word = "address";

正则表达式如下:

Pattern p = Pattern.compile("<fieldEnName>(.*?)</fieldEnName>");
Matcher m = p.matcher(detail);

Pattern p1 = Pattern.compile("<fieldContent>(.*?)</fieldContent>");
Matcher m1 = p1.matcher(detail);

while (m.find()) {
m1.find();
if(m.group(1).indexOf(key_word)!=-1){
String tmp = m1.group(1);//要取的值
}
}


用这个正则表达式先遍历xml,找到fieldEnName标签里值是address的,然后取后面的fieldContent里的内容,最后得到结果是北京市朝阳区。

但是现在如果地址里有换行,比如北京市朝阳区里北京市后面有换行,那就取不到这个地址了。请问正则表达式怎么改才行?
...全文
357 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
末日哥 2013-12-30
  • 打赏
  • 举报
回复
输出带换行的,你试试不就行了
charlesxu 2013-12-30
  • 打赏
  • 举报
回复
引用 2 楼 fudongrifdr 的回复:
(.*?)改成([\\s\\S]*?)
这种办法是能把所有空格都过滤掉吗? 比如他传过来的地址是: 北京 朝阳区 我用正则表达式得到的是北京朝阳区 还是像下面这样带换行的? 北京 朝阳区
cscript 2013-12-30
  • 打赏
  • 举报
回复
把正则中的(.*?)改成([^<]*?)
 Pattern p = Pattern.compile("<fieldEnName>([^<]*?)</fieldEnName>");
        Matcher m = p.matcher(detail);
         
    Pattern p1 = Pattern.compile("<fieldContent>([^<]*?)</fieldContent>");
        Matcher m1 = p1.matcher(detail);
         
        while (m.find()) {
            m1.find();
            if(m.group(1).indexOf(key_word)!=-1){
                String tmp = m1.group(1);//要取的值
            }
        }
Test_LD 2013-12-30
  • 打赏
  • 举报
回复
// 楼主也可以先过滤一下换行符 detail = detail.replaceAll("\n", "");
末日哥 2013-12-30
  • 打赏
  • 举报
回复
(.*?)改成([\\s\\S]*?)
tony4geek 2013-12-30
  • 打赏
  • 举报
回复
	String key_word = "address";
		String detail = "<Detail><Info><fieldInfo><fieldChName>人名</fieldChName><fieldEnName>name</fieldEnName><fieldContent>张三</fieldContent></fieldInfo><fieldInfo><fieldChName>地址</fieldChName><fieldEnName>address</fieldEnName><fieldContent>北京市朝\n阳区</fieldContent></fieldInfo><fieldInfo><fieldChName>电话</fieldChName><fieldEnName>Phone</fieldEnName><fieldContent>13980898675</fieldContent></fieldInfo><fieldInfo></Info></Detail>";

		Pattern p = Pattern.compile("<fieldEnName>(.*?)</fieldEnName>");
		Matcher m = p.matcher(detail);

		Pattern p1 = Pattern.compile("<fieldContent>((.|[\n])*?)</fieldContent>");
		Matcher m1 = p1.matcher(detail);

		while (m.find()) {
			m1.find();
			if (m.group(1).indexOf(key_word) != -1) {
				String tmp = m1.group(1);// 要取的值
				System.out.println(tmp);
			}
		}

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧