Regex Negate Pattern - PullRequest
       15

Regex Negate Pattern

0 голосов
/ 06 ноября 2018

У меня проблемы с получением другой стороны этого регулярного выражения.

Stranger Number is %19. Friend Number is %30. 

Мое текущее регулярное выражение это (%[0-9]+) Поэтому, когда я запускаю это регулярное выражение. Выделены только % 30 и % 19 .

Strange Number is %19. Friend Number is %30. 

Я просто хочу наоборот, где% 19 и% 30 не выделены, а все остальное выделено.

Я пытался. этот [^%](?![0-9]) но я не получаю ожидаемого результата.

спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Для полноты, а также для более ранних версий Java, вы можете просто использовать цикл Matcher и while для извлечения строк, соответствующих шаблону.

   public static void main( String[] args ) {
      String test = "Number %1.  And number %2 also.";
      Matcher matcher = Pattern.compile( "%[\\d]+" ).matcher( test );
      ArrayList<String> results = new ArrayList<>();
      while( matcher.find() )
         results.add( matcher.group() );
      System.out.println( results );
   }
0 голосов
/ 06 ноября 2018

В зависимости от того, что вы хотите сделать, вам не нужно находить перевернутое регулярное выражение для (%[0-9]+).

Например, если вы планируете извлечь все подстроки, соответствующие инвертированному регулярному выражению, вы можете использовать yourString.split("%[0-9]+").

Если вы планируете извлечь все %..., разделив строку с помощью yourString.split(invertedRegex), вы можете использовать вместо этого средство сопоставления.
Код взят из этого ответа .

String[] matches = Pattern.compile("%[0-9]+").matcher(yourString)
                          .results().map(MatchResult::group)
                          .toArray(String[]::new);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...