используя Java регулярное выражение, как я могу заменить все, когда шаблон содержит левую скобку - PullRequest
0 голосов
/ 09 октября 2009

У меня есть строка, которая выглядит так: mynum(1234) and mynum( 123) and mynum ( 12345 ) and lastly mynum(#123)

Я хочу вставить # перед числами в скобках, поэтому у меня есть: mynum(#1234) and mynum( #123) and mynum ( #12345 ) and lastly mynum(#123)

Как я могу это сделать? Используя регулярное соответствие шаблонов и дроссели replaceAll на ( перед числом, я получаю

java.util.regex.PatternSyntaxException: незамкнутая группа рядом с ...

исключение.

1 Ответ

4 голосов
/ 09 октября 2009

Попробуйте:

String text = "mynum(1234) and mynum( 123) and foo(123) mynum ( 12345 ) and lastly mynum(#123)";
System.out.println(text.replaceAll("mynum\\s*\\((?!\\s*#)", "$0#"));

Небольшое объяснение:

Заменить каждый шаблон:

mynum   // match 'mynum'
\s*     // match zero or more white space characters
\(      // match a '('
(?!     // start negative look ahead
  \s*   //   match zero or more white space characters
  #     //   match a '#'
)       // stop negative look ahead

с подстрокой:

$0#

Где $ 0 содержит текст, которому соответствует все регулярное выражение.

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