我想通过关键字匹配法律条文,找出符合条件的那一条
条文的格式大概是这个:
    第四十六条 本法自1990年4月1日起施行,国务院发布的《城市规划条例》同时废止。
所以我就想这个正则应该表达关键字query的前面有第.*条,后面截止到第.*条前面,我写的正则如下
"第.*条.*" + query + "[^(第.*条)]*"
但是匹配时,query后面只要碰到"第"、"条"就结束了,而不是完整的第几条,如上述的46条匹配出来的是
    第四十六条 本法自1990年4月1日起施行,国务院发布的《城市规划
请问怎么解决。。
好纠结啊。。
谢谢

解决方案 »

  1.   

    但是匹配时,query后面只要碰到"第"、"条"就结束了,而不是完整的第几条,如上述的46条匹配出来的是
        第四十六条 本法自1990年4月1日起施行,国务院发布的《城市规划 
    为什么会出来这个啊?其中的 query 好像都没有指定吧?不知道你要做什么!
      

  2.   

    query就是我说的关键字,这里可以指定“国务院”。。
    就是有很多法规,我要做的是通过关键字匹配法律条文,找出符合条件的那一条 
      

  3.   

    其实我说的就是这样的。。
    假设有这样一条字符串
    "abcdefghijklmnopqabrstuvwxyzabcdefg"
    现在我要通过abc作为起始和终止符来找到abcdefghijklmnopqabrstuvwxyz
    所以我写了如下的正则:"abc[^(abc)]*mno[^(abc)]*"
    但结果匹配出来的是abcdefghijklmnopq,就是说它遇到a就终止了。。我想让它遇到abc这一整个短语才结束
      

  4.   


    Pattern pattern = Pattern.compile("(abc([^a]|a[^b]|ab[^c])*)abc");
      

  5.   

    不好意思,后面多匹配了一个abc,应该是String str = "abacabcaghijklabcmnopqabcabrstuvwxyzabcdefg";
    Pattern pattern = Pattern.compile("(abc([^a]|a[^b]|ab[^c])*)");
    Matcher matcher = pattern.matcher(str);
            
    while (matcher.find())
    {
        System.out.println(matcher.group(1));
    }
      

  6.   

    不好意思,用一个正则我搞不定,不过我帮你想了一个解决办法,你看看满足不满足要求吧String str = "第四十六条 本法自1990年4月1日起施行,国务院发布的《城市规划条例》同时废止。第四十七条  XXXXXXXXXXXX";
    Pattern pattern = Pattern.compile("第[一二三四五六七八九十]+条");
    Matcher matcher = pattern.matcher(str);

    List<String> list = new LinkedList<String>();

    while (matcher.find())
    {
    list.add(matcher.group());
    }

    String temp = str.replaceAll(pattern.toString(), "第X条");

    pattern = Pattern.compile("(第X条([^第]|第[^X]|第X[^条])*)");
    matcher = pattern.matcher(temp);

    int i = 0;
    while (matcher.find())
    {
    System.out.println(matcher.group(1).replace("第X条", list.get(i++)));
    }
      

  7.   

    不得行
    希望有符合原始希望的。。
    不能改表原有的String,因为这里的法规数量不可计量。。