сопоставление с использованием регулярных выражений в Groovy - PullRequest
0 голосов
/ 28 сентября 2011

У меня есть следующий код Groovy

import java.util.regex.Matcher;
import java.util.regex.Pattern;

String myInput="License_All (12313)"
String myRegex="\\(\\d+\\)"


String ResultString
Pattern regex
Matcher regexMatcher

regex = Pattern.compile(myRegex, Pattern.DOTALL);

regexMatcher = regex.matcher(myInput);

List<String> matchList = new ArrayList<String>();
while (regexMatcher.find()) {
matchList.add(regexMatcher.group());
}

for(int i=0;i<matchList.size();i++)
{
myInput=myInput.replaceAll( matchList[i], '')
println matchList[i]
}
println myInput

Предполагается удалить (12313) часть, но вместо этого он дает мне следующий вывод

(12313)
License_All ()

Как мне удалить всечасть кронштейна (12313)?

Ответы [ 2 ]

2 голосов
/ 28 сентября 2011

matchList будет содержать соответствующую часть, то есть (12313).Затем это снова принимается за регулярное выражение в replaceAll и поэтому интерпретируется как группа.Таким образом, скобки не удаляются.

Вместо этого вы можете использовать свое регулярное выражение непосредственно в replaceAll:

myInput.replaceAll(myRegex, "")
1 голос
/ 28 сентября 2011

Поскольку вы используете replaceAll, он ожидает Pattern в качестве первого элемента

myInput = myInput.replaceAll( Pattern.compile(myRegex, Pattern.DOTALL), '' )

Должен это сделать ...


Кроме того, ваш исходный код может быть превращен в более идиоматический Groovy (а не в основном в Java), например, так - очевидно, это та же проблема, что и в вашем первоначальном вопросе, это просто более Groovy способ написания кода:

import java.util.regex.Pattern

String myInput = "License_All (12313)"

def regex = Pattern.compile( /\(\d+\)/, Pattern.DOTALL);

List<String> matchList = ( myInput =~ regex ) as List

matchList.each { m ->
  myInput = myInput.replaceAll( m, '')
  println m
}
println myInput
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...