我正在整理一些旧文档并试图在其中做出一些顺序,可能会将它们放在更易读的格式中,所以我正在编写一些脚本来修复它们。
因为我只知道基本的正则表达式,所以我认为这是学习更多知识的好机会,但我有点卡住了。
以下是我的数据样本:
Adapter za uređaje sa navojem M52x0.75 (Dedal, Jahnke) - 34 mm
Prednja baza za nosač skidajući (Švenk) - Antonio Zoli: 1900
Prednja baza za nosač skidajući (Švenk) - CZ 550, 557, 537, ZKK, 600, 601, 602 (19 mm prism)
Redukcijski prsten za Dedal monokular M-54X - 44 mm
Prsteni - prizma 11 - 25.4 mm, matica, H12
Prsteni - prizma 16,5 - 25.4 (26) mm, matica, H14
Stražnja nožica za nosač skidajući (Švenk), H10.3
Prednja nožica za nosač skidajući (Švenk), H10, KR10
Nosač s etažom - prizma 16,5 (CZ 527) - 30 mm, ručica, H15
Nastavak za čišćenje (mesing) M4 - kalibar .22
以下是我希望将其组合在一起(用[]标记的组:
[Adapter za uređaje sa navojem M52x0.75 (Dedal, Jahnke)] - [34 mm]
[Prednja baza za nosač skidajući (Švenk)] - [Antonio Zoli: 1900]
[Prednja baza za nosač skidajući (Švenk)] - [CZ 550, 557, 537, ZKK, 600, 601, 602 (19 mm prism)]
[Redukcijski prsten za Dedal monokular M-54X] - [44 mm]
[Prsteni - prizma 11 - 25.4 mm, matica], [H12]
[Prsteni - prizma 16,5 - 25.4 (26) mm, matica], [H14]
[Stražnja nožica za nosač skidajući (Švenk)], [H10.3]
[Prednja nožica za nosač skidajući (Švenk), H10], [KR10]
[Nosač s etažom - prizma 16,5 (CZ 527) - 30 mm, ručica], [H15]
[Nastavak za čišćenje (mesing) M4] - [kalibar .22]
基本上,我设想的规则如下:
H(num)
或KR(num)
结尾,则选择一个组中的(H|KR)(num)
和另一组中的(H|KR)(num)
,否则
-
或,
中的所有内容,第二组后的所有内容(与-
匹配优先于,
)这是我的1和2的正则表达式:
(.+), ((?:H|KR)[0-9\.]+)$
(.*)(?: -) (.*)|(.*)(?:,) *(.*)
现在我只需要测试(?:H|KR)[0-9\.]+$
是否匹配,然后相应地选择1
或2
,但我不知道如何。
我发现可以使用(?(?=regex)then|else)
完成,但是当我合并我的解决方案时,它不起作用。这是:
(?(?=(?:H|KR)[0-9\.]+$)(.+), ((?:H|KR)[0-9\.]+)$|(?:(.*)(?: -) (.*)|(.*)(?:,) *(.*)))
我可以在脚本中进行测试,但我想我会用正则表达式尝试一下。如果有人能找到它,我也会感谢我的解决方案更优雅:D
谢谢!
[编辑]
我忘了添加两个关键测试用例,这里是:
Stražnja nožica za nosač skidajući (Švenk), H8.3
Prednja nožica MAGNUM za nosač skidajući (Švenk), H12, KR38
应该返回
[Stražnja nožica za nosač skidajući (Švenk)], [H8.3]
[Prednja nožica MAGNUM za nosač skidajući (Švenk), H12], [KR38]