2016-11-22 5 views
0

私はさまざまな複雑さの一連のファイル名を持っています。基本的には、[_] {ASSET} _ [OPTIONAL_DESCRIPTION] _v {#####}。{EXT}によって分割されます。 ([]はオプションです)。しかし、その形式の中では、各部分は任意に複雑にすることができます。 (大手_sは任意である)Regexが1つ以上のグループをあまりにも多く一致させています

character_thing_v001.md 
character_Description_v001.md 
character_Some_Long_Description_v001.md 
character_thing_with_additional_info_v001.md 
character_thing_with_additional_info_Description_v001.md 
character_thing_with_additional_info_More_Description_Info_v001.md 
character_with_additional_info_Complete234ly_arbitrary_Description_v001.md 
_character_thing_v001.md 
___character_Description_v001.md 
____character_Some_Long_Description_v001.md 
__character_thing_with_additional_info_v001.md 
__character_thing_with_additional_info_Description_v001.md 
___character_thing_with_additional_info_More_Description_Info_v001.md 

は、私は、資産と説明を分離するために先読みアサーションを作り、私の上司は、システム内のレンチを投げたときすべてが、つい最近まではうまくいきました。今では、 "some_undercase"または "CAPS _ ###"という規約を持つアセットをサポートする必要があります。私はA-Zを許可するように変更し、descriptionTextを何かにマッチさせました。それは混乱が始まったところです。

 (?:[_]+)? 
    (?P<assetText>[a-zA-Z0-9]+ 
     (?=_[a-zA-Z0-9]+)? # lookahead and optionally assert _Capital 
     (?:(?:_[a-zA-Z0-9]+)+)? # match next group if it exists 
    ) # get full match 
    (?:[_]+)? 
    \_(?P<descriptionText>.+)? 
    \_v(?P<versionIncrement>\d+) 
    \.(?:\.)? 
     (?P<extension>(?:md|some|other|extension|options)) 

これは私が道の一部を取得しますが、それは今、資産が資本を持つことができること、先読みが資産のあまり一致し、説明に入る起動し、表示できる問題、here

を持っています。このパターンは自動的に生成されるいくつかのパターンの1つで、私は問題の根本を解決する方法を探しています。ご指導いただければ幸いです。ありがとうございます。

答えて

1

あなたの正規表現のうち、不要と思われる部分のロジックを実際には追うことはできません。

this simplified regexは同じ仕事をしていませんか?

_* 
(?P<assetText>[a-zA-Z0-9]+(_[a-z_0-9]+)?) 
(_ (?P<descriptionText>[a-zA-Z0-9_]+) )? 
_v(?P<versionIncrement>[0-9]+) 
(?P<extension>\.[A-Za-z0-9]+) 

おそらく(自然言語)ルール資産を構成するもののために、どのようなオプションの説明を構成して明確にする必要があります。

  • 「資産」は、アンダースコア(私は仮定しているが含まれていることができますあなたの最初の文章のテンプレートから)
    • 「はい」の場合:「資産」の終了位置と「説明」の開始ルールは何ですか?説明は常に大文字で始まるのですか?
      • 「はい」の場合:大文字が「アセット」に表示され、表示されない場合のルールは何ですか?制限がない場合、資産と説明の間の分割は本当に不確定です。
+0

私は明確にし、オリジナルのポストを編集します。資産は常にunder_case(例:character_thing)または(現在)CAPS _ ###(例:DOLL_101)です。説明はCapital_Caseです。だから、単にマッチを得るだけでは不十分です。各部分は、適切な点で開始し、終了する必要があります。あなたの正規表現では、例えば "character_thing_with_additional_info_More_Description_Info_v001.md "の資産は "character"であり、記述は "thing_with_additional_info_More_Description_Info"であるのに対して、私は資産が "character_thing_with_additional_info"であり、記述が "More_Description_Info"であることを探しています – ColinKennedy

+0

2番目のはい、私は同意する、この条約はあまり定義されていません。しかし、私は基本的には「資産は小文字である」と考えています。その場合、資産と説明の間の分割はCAPS _ ###でない限り、最初の資本ではありません。説明の中で "。 – ColinKennedy

+0

私は 'assetText'行にサブ式を追加しました。私はあなたが今したい仕事をしていると思う – jez

関連する問題