ファイル名を特定のパターンに従って解析しようとしていますが、完全一致できません。ここではサンプルファイル名です:正規表現でJavaでファイル名を解析する
CRS-ISAU-RPV#3430_Dedalus_Conc.ok.erto_AOTreviglio.doc
そして、ここでは私の要件は次のとおりです。
文字#
ゴマファイル名が#
後、何かを含めることができ、私は分離する文字_
または文字-
を見つけなければなりません文字列。文字の間の文字列(任意に_
または-
- 両方ではない)には、他の文字を含めることができます。だから、最終的に文字#
の後に私はちょうど3つ(_
)または-
文字を組み合わせる必要があります。文字列は、.doc
または.docx
または.odt
で終了する必要がありますが、.ok.doc
または.ok.docx
または.ok.odt
ではありません。
(.*)#([^_-]+)[_-]([^_-]+)[_-]([^_-]+)[_-]([^_-]+)\.[doc|odt|docx].*(?<!\.ok)$
しかし、これは.doc.ok
または.docs.ok
または.docx.ok
で文字列を終了するために私を強制し、実際に私は最後にファイルの拡張子を保持したい:ここ
は、私が試したものです。
私はこのしようとした場合:
(.*)#([^_-]+)[_-]([^_-]+)[_-]([^_-]+)[_-]([^_-]+)\..*(?<!ok\.[doc|odt|docx])$
それ文句を言わない仕事を。
ご協力いただければ幸いです。ありがとう:)
構文 '[DOC | ODT | docxファイル]'あなたはそれがないと思うように見える何をしません。 '[?]'を非キャプチャグループに置き換えてみてください: '(?:)' – jsheeran
[( "^#] *#[^ -_] *)[-_](。*)$( ?:(?<=(?<!\\。ok)\\。docx $)|(?<=(?<!\\。ok)\\。doc $) \\。ok)\\。odt $)) "'](https://regex101.com/r/eH3wY2/1) –
@WiktorStribiżewhttp://www.ocpsoft.org/tutorials/regular-expressions/java -visual-regex-tester /このリンクはあなたが提案しているものに対してエラーを投げます。 –