Я пытаюсь проанализировать имя файла в соответствии с заданным шаблоном, но не в состоянии улучшить соответствие. Вот это имя образец файла:Regex для разбора имени файла в Java
CRS-ISAU-RPV#3430_Dedalus_Conc.ok.erto_AOTreviglio.doc
А вот мои требования:
сезам характера #
имя файла может содержать что-либо, после #
, я должен найти символ _
или символ -
отделить строка. Строка между символом (необязательно _
или -
- но не оба) может содержать любой другой символ. Поэтому в конце концов после символа #
у меня должно быть ровно три (3) _
или -
символов. Строка должна заканчиваться .doc
или .docx
или .odt
, но NOT .ok.doc
или .ok.docx
или .ok.odt
.
Вот что я пробовал:
(.*)#([^_-]+)[_-]([^_-]+)[_-]([^_-]+)[_-]([^_-]+)\.[doc|odt|docx].*(?<!\.ok)$
Но это заставляет меня закончить строку с .doc.ok
или .docs.ok
или .docx.ok
и на самом деле я хочу, чтобы сохранить расширение файла в конце.
Если я попробовать это:
(.*)#([^_-]+)[_-]([^_-]+)[_-]([^_-]+)[_-]([^_-]+)\..*(?<!ok\.[doc|odt|docx])$
это не будет работать.
Любая помощь будет оценена по достоинству. Спасибо :)
Синтаксис '[док | а.с. | DOCX]' не делать то, что вы, кажется, думаете, что он делает. Попробуйте заменить '[]' на неконвертирующую группу: '(? :)' – jsheeran
Попробуйте ['"^([^ #] * # [^ -_] *) [-_] (. *) $ (?: (? <= (<\\ нормально) \\ DOCX $?!..) | (<= (<| (<= (<\\ нормально) \\ док $?!.).?! \\. ok) \\. odt $)) "'] (https://regex101.com/r/eH3wY2/1) –
@ WiktorStribiżew http://www.ocpsoft.org/tutorials/regular-expressions/java -visual-regex-tester/эта ссылка выдает ошибку за то, что вы предлагаете. –