3

正規表現を書くのに苦労しています。

文字列からいくつかの情報を抽出し、その中の特定の部分を特定する必要があります。

すべての部分が必須ではありません。

私の形式は次のORDER_filename.extension(options)とおりfilenameです。ORDERextensionoptions

たとえば、私は持っているかもしれません:

100_Some file name.ext(3)
_Some other file name.ext
300_Folder name
400_Another Folder name(5)

抽出できるはずです:

Order  |   Filename                 |  extension | options
----------------------------------------------------------
100    |   Some file name           |  ext       | 3
(null) |   _Some other file name    |  ext       | (null)
300    |   Folder name              |  (null)    | (null)
400    |   Another Folder name      |  (null)    | 5

2 行目のファイル名にはアンダースコアが含まれています

私は正規表現ライブラリで少し遊んでいますが、すべての部分を抽出することに成功しませんでした。

私は試した:

  • ^(?<order>[0-9_]+_)?(?<filename>\w+): ただし、ファイル名をスペースで分割します
  • ^(?<order>[0-9_]+_)?(?<filename>\w+)(\.(?<ext>.+))?: 拡張子は抽出されません。ファイル名はまだ分割されています。
  • ^(?<order>[0-9_]+_)?(?<filename>\w+)(\.(?<ext>.+))?(\((?<options>.+)\))?: 拡張子もオプションも抽出されません。ファイル名はまだ分割されています。

私が使うべき正しい表現は何ですか?

参考までに、C# の名前付きキャプチャを使用して、これらの値を使用していくつかの作業を行います。

4

2 に答える 2

4

どうでも、

\wエイリアスを誤解していました。これにはスペースは含まれません。

この式は期待どおりに機能しています:

^(?<order>[0-9_]+_)?(?<filename>(\w|\s)+)(\.(?<ext>\w+))?(\((?<options>.+)\))?

[編集]残念ながら、これが爆発するケースがいくつかあります:

100_some file() name.doc(3)
于 2013-05-03T16:13:16.417 に答える