从字符串的开头提取一些文本

时间:2018-05-10 12:45:03

标签: java regex

我很难解决这个问题:给定一个字符串,它可能在开头包含一些信息,但这些信息完全是可选的。格式为"//<some text>\n<other text>",其中"//<some text>\n"完全是可选的,但很重要。

示例为:"//;\n123""123",在第一个示例中,我想要提取"//;\n""123",而在第二个示例中我可以使用"123"

我试过了

"^//(.*)\\n?(.*)$"
"^\\B//(.*)\\n\\B?(.*)$"
"^(//.*\\n)?(.*)$"

但两者都没有效果。你能帮忙吗?

2 个答案:

答案 0 :(得分:1)

你不应该在前半部分使用.*,它可能会“吃掉”\

您可以使用正则表达式^(//([^\\]*)\\n)?(.*)$

示例:

public static void main(String[] args) {
    Pattern pattern = Pattern.compile("^(//([^\\\\]*)\\\\n)?(.*)$");
    Matcher matcher = pattern.matcher("//;\\n123");
    System.out.println(matcher.matches()); //   output: true
    System.out.println(matcher.group(0));  //   output: //;\n123
    System.out.println(matcher.group(1));  //   output:  //;\n
    System.out.println(matcher.group(2));  //   output: ;
    System.out.println(matcher.group(3));  //   output: 123
}

答案 1 :(得分:0)

试试Regex:

^"(\/\/.*\\n)?(.*)"

Demo

说明: (\/\/.*\\n)?检查以\\开头并以\n结尾的捕获组的零次或一次

(.*) - 捕获\n"

之间所有内容的第二个捕获组