Извлечь некоторый текст из начала строки - PullRequest
0 голосов
/ 10 мая 2018

Я застрял, чтобы решить эту проблему: дана строка, которая может содержать некоторую информацию в начале, но эта информация совершенно необязательна.Формат "//<some text>\n<other text>", в котором "//<some text>\n" не является обязательным, но это важно.

Примеры: "//;\n123" и "123", в первом примере я хотел бы извлечь "//;\n" и"123" в то время как в секунду я в порядке с "123".

Я пробовал

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

, но ни один не работает.Можете ли вы помочь?

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Вы не должны использовать .* в первой половине, это может «съесть» \.

Вы можете использовать регулярное выражение ^(//([^\\]*)\\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
}
0 голосов
/ 10 мая 2018

Попробуйте Regex:

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

Демонстрация

Объяснение: (\/\/.*\\n)? проверяет на ноль или одно вхождение группы захвата, которая начинается с \\ изаканчивается на \n

(.*) - вторая группа захвата, которая захватывает все, что находится между \n и "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...