Как получить все в строку, но определенный шаблон - PullRequest
2 голосов
/ 07 января 2011

Еще один вопрос регулярного выражения:

У меня есть следующая строка:

"This is a string, and I have a priority !1"

Итак, я хочу построить регулярное выражение, которое извлекает мой приоритет, то есть это число 1, которому предшествует «!». Извлечь его очень легко, "! ([1-4])". Но теперь я хочу извлечь текст, оставив его! Как я могу это сделать?

ДЕТАЛИ :! 1 может быть в любом месте строки, так что это также прекрасно:

"This is a string, !1 and I have a priority"

Спасибо!

ОБНОВЛЕНИЕ : я использую scala

Ответы [ 2 ]

3 голосов
/ 07 января 2011

Вы можете заменить! 1,! 2,! 3 и! 4 пустой строкой:

String newString = "some string with !1 and more text".replaceAll("![1-4]", "");

3 голосов
/ 07 января 2011
(.*?)!([1-4])(.*?)

Это регулярное выражение использует ленивые квантификаторы для лучшей производительности и даст вам три группы захвата:

  • Текст перед маркером! 1 (фактически, текст перед первым появлением маркера в строке).
  • Сам маркер
  • Текст, следующий за маркером

Вы также можете использовать что-то вроде String.replace () или Matcher.appendReplacement () , как упоминает jarnbjo в своем ответе, но в любом случае эти три группы дают вам тебе нужно.

РЕДАКТИРОВАТЬ: Вот правильная версия регулярного выражения:

(.*?)!([1-4])(.*)

На основании комментариев я сделал второй квантификатор жадным, чтобы он соответствовал остальной части строки.

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