регулярные выражения в Java - PullRequest
0 голосов
/ 11 мая 2011

Как проверить выражение для одного символа точки?Например, если у меня есть выражение "trjb....fsf..ib.bi.", оно должно возвращать только точки с индексами 15 и 18. Если я использую Pattern p=Pattern.compile("(\\.)+");, я получаю

4 ....
11 ..
15 .
18 .

Ответы [ 4 ]

2 голосов
/ 11 мая 2011

Это, кажется, делает трюк:

String input = "trjb....fsf..ib.bi.";
Pattern pattern = Pattern.compile("[^\\.]\\.([^\\.]|$)");
Matcher matcher = pattern.matcher(" " + input);
while (matcher.find()) {
    System.out.println(matcher.start());
}

Дополнительное пространство перед входом делает две вещи:

  1. Позволяет обнаружить . в качестве первого символа входной строки
  2. Смещает matcher.start() на единицу для учета символа перед совпавшим .

Результат:

15
18
2 голосов
/ 11 мая 2011

добавить пробел в начале и конце строки, а затем использовать шаблон

"[^\\.]\\.[^\\.]"
1 голос
/ 11 мая 2011

вам нужно использовать отрицательные взгляды.

Что-то вроде Pattern.compile("(?<!\\.)\\.(?!\\.)");

0 голосов
/ 11 мая 2011

Попробуйте

Pattern.compile("(?<=[^\\.])\\.(?=[^\\.])")

или даже лучше ...

Pattern.compile("(?<![\\.])\\.(?![\\.])")

При этом используется отрицательный обзор.

(?<![\\.]) => не с предшествующим .

\\. => a .

(?![\\.]) => не , за которым следует .

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