2016-01-20 2 views
1

Я пытаюсь получить регулярное выражение для следующего выражения, но не может сделать это:Regex для первого слова и последнего слова строки разделяет с

  • Строка имеют 4 слов, разделенных точками (.) ,
  • Первое слово соответствует данному (например, HELLO).
  • Второе и третье слова могут иметь любой символ, кроме самой точки (.).
  • Последнее слово соответствует данному снова (например, csv).

Итак:

  • HELLO.something.Somethi # gElse.csv должны совпадать.
  • something.HELLO.?.csv не должен совпадать.
  • HELLO.something ... csv не должен совпадать.
  • HELLO.something.somethingelse.notcsv не должны совпадать

я могу сделать это с расколом (.), А затем проверить отдельные слова, но я стараюсь, чтобы он работал с Regex и классом Pattern ,

Любая помощь была бы действительно оценена.

+0

Добро пожаловать в переполнение стека! Пожалуйста, добавьте код, чтобы показать, что вы пробовали. –

ответ

3

Это относительно просто, если вы понимаете классы символов. Регулярное выражение с квадратными скобками [xyz] соответствует любому символу из списка {x, y, z}; a regex [^xyz] соответствует любым символам кроме{x, y, z}.

Теперь вы можете построить ваше выражение:

^HELLO\.[^.]+\.[^.]+\.csv$ 

+ означает «один или более из предыдущего выражения»; \. означает «точка сама». ^ означает «начало строки»; $ означает «конец строки». Эти анкеры предотвращают регулярное выражение из сращивания

blahblahHELLO.world.world.csvblahblah 

Demo.

общая цель для написания регулярных выражений, как то есть захвата некоторые содержания, например, строка между первой и второй точкой, и строка между второй и третьей точками. Используйте захватив группу довести содержание этих строк в вашу программу Java:

^HELLO\.([^.]+)\.([^.]+)\.csv$ 

Каждая пара скобок определяет захват группу, индексированную из 1 (групп по нулевому индексу представляет собой захват всего выражения). Когда вы получите объект соответствия из шаблона, вы можете запросить его для групп и извлечь соответствующие строки.

Обратите внимание, что обратные косые черты в Java regex необходимо удвоить.

+0

Если 'HELLO ... csv' является допустимым совпадением, тогда переключитесь с' + '- * на один или несколько * на' * '- * ноль или более *. – OldCurmudgeon

+0

Хороший ответ. Возможно, вам захочется продемонстрировать регулярное выражение, в котором первое слово может быть HELLO или WORLD или FOO, а последнее слово может быть csv или xls или txt. –

+0

Также можно указать группы, чтобы собрать каждое слово из совпадения. – OldCurmudgeon

Смежные вопросы