正则表达式可以同时选择特定字符之后的字符

时间:2018-10-18 17:17:08

标签: java regex

有什么办法可以在特定文本之后选择特定文本,并继续选择直到选择该单词。选中后,剩下的就剩下。

这里是例子

    ABCDEF
     JHJHJNJN<098978686
     <jjg>
    HGHJFGV XXXX    
       10-10-2018
    JHKGHKGHG
        JKHJHHJM
10-10-2019 JGHHGHGVH
HBVJHBHBB

只想在整个内容中选择该日期为10-10-2018,该日期总是在XXX之后,并带有空格。我不能只使用具有特定值的正则表达式(10-10-2018),因为可以更改日期,并且可能在某些地方也存在日期模式,例如最后一行中的示例。

请分享您的想法..

谢谢

1 个答案:

答案 0 :(得分:0)

假设示例正确,则以下正则表达式将使用find()仅提取日期,并确保设置了DOTALL

"XXXX.*?[\\s]+([\\d]{1,2}-[\\d]{1,2}-[\\d]{4})"

基本上,搜索XXX,然后搜索空格/换行符,然后找到日期。它将被放入一个组,然后可以将其提取。

尽管请确保选择“ DOTALL”,但您仍可以看到操作at this location

public String getDate(String input)
{
    String date = "";
    Pattern dte = Pattern.compile("XXXX.*?[\\s]+([\\d]{1,2}-[\\d]{1,2}-[\\d]{4})", Pattern.DOTALL);

    Matcher m = dte.matcher(input);
    if (m.find() && m.groupCount() > 0) {
        date = m.group(1);
    }

    return date;
}

测试用例

@Test
public void testData() throws Exception
{
    RegEx_52879334 re = new RegEx_52879334();
    String input = re.getInputData();

    String date = re.getDate(input);

    assertEquals("10-10-2018", date);
    System.out.println("Found: " + date);
}

输出:

  

发现:2018年10月10日