我有一系列不同复杂程度的文件名。基本上,它们总是被[_] {ASSET} _ [OPTIONAL_DESCRIPTION] _v {######}。{EXT}分割。 ([]在这种情况下是可选的)。在这种格式下,每件作品都可以任意复杂。 (领先_s是任意)正则表达式匹配一个或多个组太多
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
现在,该资产能够有资金,先行匹配太多资产,并且开始进入的描述。这种模式是自动生成的几个模式之一,所以我正在寻找一种解决问题根源的方法,而不是写在问题的根源上。任何指导将非常感激,谢谢。
我会澄清和修改原来的职位。资产始终是under_case(例如:character_thing)或(现在)CAPS _ ###(例如:DOLL_101),说明是Capital_Case。所以仅仅获得一场比赛是不够的。每个部分必须以正确的点开始和结束。例如,用你的正则表达式,“character_thing_with_additional_info_More_Description_Info_v001.md ”的资产是“字符”,描述是“thing_with_additional_info_More_Description_Info”,而我正在寻找资产为“character_thing_with_additional_info”,描述为“More_Description_Info” – ColinKennedy
因此要回答你的问题第二,是的,我同意,这个公约是不明确的。但我认为它基本上是“资产不足,在这种情况下,资产和描述之间的分割是第一个资本,除非它们是CAPS _ ###,在这种情况下,资产和描述之间的分割在数字之后,而不是第一个资本在描述中“。 – ColinKennedy
好的,我已在'assetText'行添加了一个子表达式。我认为它现在可以完成你想要的工作 – jez