2016-04-19 4 views
-1

Мне нужно сопоставить следующие шаблоны для извлечения файлов.Как совместить выражение с разными шаблонами

some text here ../../file/path/dir/200.FILETYPE.234234.20150404_092222.xml and some text 
some random text here ../../file/path/dir/FILETYPE.345223.SOMETEXT.20150404_092222.xml and some other text 

попытался это, чтобы извлечь от типа файла

".*\/dir\/(?<importfiletype>.*)\..*\..*\..*\.xml 

но он выбирает FILETYPE.345223 в поле извлеченного вместо того, чтобы просто FILETYPE. Он правильно извлекает FILETYPE, поскольку перед xml есть только 3 точки. Любая помощь приветствуется.

Примечание: FILETYPE может быть любое слово, как JPG, PNG и т.д.

Пример пути: ../../file/path/dir/jpg.345223.SOMETEXT.20150404_092222.xml ../ ../file/path/dir/200.jpg.3235223.SOMETEXT.20150404_092222.something.xml ../../file/path/dir/png.SOMETEXT.SOMETEXT.20150404_092222.xml

после PNG или jpg и до того, как могут быть 3 или 4 точки

+1

его правильно работать в соответствии с вашим регулярным выражением: - https://regex101.com/r/uH1iA1/1 , но до сих пор его не ясно, что ты хочешь? – rock321987

+0

хорошо выбирает «200» и «ANOTHERFILETYPE» соответственно. – sweaver2112

+0

@ rock321987 если вы видите две строки необработанных данных. Одна строка имеет 3 точки перед строкой xml, а другая имеет четыре точки. Таким образом, в каждом случае совпадают 3 точки, но во втором случае я получаю ANOTHERFILETYPE.345223 вместо ANOTHERFILETYPE. Я сделал тест, чтобы показать вам, в чем проблема: https://regex101.com/r/fM5wT2/1. Мне нужно только ANOTHERFILETYPE или что-нибудь перед ним есть 200.TYPEXFILETYPE в первой строке, ANOTHERFILETYPE во второй строке – Nagarjun

ответ

0
^.* (.*\/dir\/[^\.]*)\.([^ ]*).*$ 

Группа 1 - это путь + Имя файла, группа 2 является Filetype (все после первой точки ко следующей пустой)