RegEx для объединения нескольких последовательностей - PullRequest
3 голосов
/ 13 мая 2019

Как и многие люди, я борюсь с тем, что кажется «тривиальной» проблемой регулярных выражений. в данном тексте всякий раз, когда я сталкиваюсь со словом в скобках {}, мне нужно его извлечь. Сначала я использовал

"\\{-?(\\w{3,})\\}"

и все заработало нормально:

, пока в слове не было пробела или специального символа, например '. Например, {Project} возвращает Project.But {Project Test} или {Project D'arce} ничего не возвращают. я знаю, что для белых символов мне нужно использовать \ s. Но мне совершенно не понятно, как добавить к вышесказанному, я попытался:

"%\\{-?(\\w(\\s{3,})\\)\\}"))

но не работает. А что если я хочу добавить слова, содержащие специальные символы, такие как '??? Это действительно расстраивает

Ответы [ 2 ]

3 голосов
/ 13 мая 2019

Как насчет сопоставления любого символа внутри {..}, который не является }?

Для этого вы можете использовать класс отрицательных символов [^..], например [^}].Таким образом, ваше регулярное выражение может выглядеть как

"\\{[^}]{3,}\\}"

Но если вы хотите ограничить свое регулярное выражение только каким-то конкретным алфавитом, вы также можете использовать класс символов для объединения многих символов и даже предопределенных сокращенных классов символов как \w \s \d и т. д.

Так что если вы хотите принять любой символ слова \w или пробел \s или ', ваше регулярное выражение может выглядеть как

"\\{[\\w\\s']{3,}\\}"
2 голосов
/ 13 мая 2019

Вы можете использовать класс символов [\w\s'] и добавить к нему то, что вы можете позволить соответствовать:

\{-?([\w\s']{3,})}

В Java

String regex = "\\{-?([\\w\\s']{3,})}";

Regex demo

Если вы хотите запретить сопоставление только 3 пробельных символов, вы можете использовать повторяющуюся группу:

\{-?\h*([\w']{3,}(?:\h+[\w']+)*)\h*}

О шаблоне

  • \{ Совпадение { символ
  • -? Необязательный дефис
  • \h* Соответствует 0+ раз горизонтальному символу пробела
  • ([\w\s']{3,}) Захват в группе, совпадающей 3 или более раз, со словом char, пробелом или '
  • (?:\h[\w']+)* Повторите 0+ раз, сопоставляя 1+ горизонтальных пробельных символов, а затем то, что указано в классе символов
  • \h* Соответствует 0+ раз горизонтальному символу пробела
  • } Совпадение }

В Java

String regex = "\\{-?\\h*([\\w']{3,}(?:\\h+[\\w']+)*)\\h*}";

Regex demo

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