Java - регулярное выражение для разделения до последней точки - PullRequest
0 голосов
/ 26 апреля 2020

Я пытаюсь разбить строку на 2 части с помощью регулярных выражений. первая часть должна содержать все ди git, включая точки между ними до последней точки. 2-я часть массива должна быть последней ди git, исключая точку. Почему это регулярное выражение не дает желаемого результата?

    String str = "12.345.678.90.111.213.1";
    String[] arr  = str.split("[^\\.]([^.]*)$" , 2);

Ожидаемый результат:

[12.345.678.90.111.213,1]

Фактический результат:

[12.345.678.90.111.213., ]

Ответы [ 4 ]

2 голосов
/ 26 апреля 2020

str = "12.345.678.90.111.213.1";
arrMatch = str.match(/(.*)\.(.*)/);
arr = [arrMatch[1], arrMatch[2]];
console.log(arr);
или
str = "12.345.678.90.111.213.1";
arr = str.split(/(.*)\.(.*)/).filter(el => {
    return !!el;
})

console.log(arr);
2 голосов
/ 26 апреля 2020

Требуется, чтобы регулярное выражение только соответствовало последней точке, при этом следя за тем, чтобы после нее не осталось больше точек.

Чтобы сделать это, вы сопоставляете точку, которая требует экранирования, поэтому используйте \., затем используйте положительный прогноз нулевой ширины, чтобы убедиться, что остальная часть строки не имеет точки, т. Е. Используйте (?=[^.]+$)

В качестве альтернативы используйте отрицательный взгляд нулевой ширины. вперед, чтобы убедиться, что он не может найти точку, т.е. (?!.*\.)

Я предпочитаю первое, поэтому используйте \.(?=[^.]+$), что в Java означает "\\.(?=[^.]+$)"

2 голосов
/ 26 апреля 2020

Вы можете разбить строку в месте нулевой ширины между последней точкой и символом, который предшествует последней точке:

(?=\.[^.]+$)

Демо

2 голосов
/ 26 апреля 2020

Вместо использования регулярных выражений вы можете легко сделать это, используя String::substring, как показано ниже:

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        String str = "12.345.678.90.111.213.1";
        if (str.lastIndexOf(".") != -1) {
            String[] arr = { str.substring(0, str.lastIndexOf(".")), str.substring(str.lastIndexOf(".") + 1) };
            System.out.println(Arrays.toString(arr));
        }
    }
}

Вывод:

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