首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pattern.dotall不在\Q和\E之间工作

pattern.dotall不在\Q和\E之间工作
EN

Stack Overflow用户
提问于 2016-02-15 09:58:33
回答 1查看 410关注 0票数 1

我想编写一个正则表达式,从输入行中获取名称和城市。

例子:

嗨大卫!你好吗?你现在在钦奈吗?

我要把大卫和陈奈从这一段里拿来

我编写了下面的代码,它运行得很好,但是只要这一行有断行,它就不能工作。

代码语言:javascript
复制
package com.test;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Testing {

    public static void main(String[] args) {

        String input = "Passage : Hi David! how are you? are you in chennai now? "
                + "\n Hi Ram! how are you?\n are you in chennai now?";
        String regex1="\\QHi \\E(.*?)\\Q! how are you? are you in \\E(.*?)\\Q now?\\E";
        Pattern p = Pattern.compile(regex1,Pattern.DOTALL);
        Matcher m = p.matcher(input);

        StringBuffer result = new StringBuffer();
        while (m.find()) {
            m.appendReplacement(result,m.group(1)+" is fine and yes I am in "+m.group(2));
        }
         m.appendTail(result);
        System.out.println(result);
    }

}

产出:

经文:大卫很好,是的,我在钦奈,嗨,拉姆!你好吗?你现在在钦奈吗?

预期产出

经文:大卫很好,我在钦奈,拉姆很好,我在钦奈。

注意:我也使用过Pattern.DOTALL。

提前谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-15 10:45:20

如果输入可以包含双空格,或者行提要/回车返回,而不是常规空格,则应该使用\s空格速记字符类,这也意味着您在模式中不能那么依赖\Q...\E

我建议用以下方式改变规则:

代码语言:javascript
复制
String regex1="Hi\\s+(.*?)\\s+how\\s+are\\s+you\\?\\s+are\\s+you\\s+in\\s+(.*?)\\s+now\\?";

regex演示

输出:

代码语言:javascript
复制
Passage : David! is fine and yes I am in chennai 
 Ram! is fine and yes I am in chennai
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35406299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档