给定格式化文件名的正则表达式匹配某些条件?

时间:2012-01-05 20:25:43

标签: ruby regex

(对不起标题,任何建议表示赞赏); - )

好吧,考虑一下这些字符串:

first = "SC/SCO_160ZA206_T_mlaz_kdiz_nziizjeij.ext"
second = "MLA/SA2_jkj15PO_B_lkazkl lakzlk-akzl.oxt"
third = "A12A/AZD_KZALKZL_F_LKAZ_AZ__azaz___.ixt"

我正在寻找一个正则表达式,允许我得到这样的数组(在ruby中):

first_array = ['SCO', '160ZA206', 'T', 'mlaz_kdiz_nziizjeij']
second_array = ['SA2', 'jkj15PO', 'B', 'lkazkl lakzlk-akzl']
third_array = ['AZD', 'KZALKZL', 'F', 'LKAZ_AZ__azaz___']

第一场比赛必须在/之后和第一场_

之前。

第二场比赛必须是第一场和第二场_

之间的任何比赛

第三场比赛必须是第二场和第三场之间的任何比赛_

最后一场比赛必须是第三场_和最后一场.

之间的任何内容

我无法得到它:[^\/].?([A-Z]*)_(.*)_(.*)[\.$]: - (

2 个答案:

答案 0 :(得分:6)

你非常接近。只需向第二个匹配器添加一个问号,使其变得懒惰(否则,它不会停在第一个下划线),然后复制该匹配器。

[^\/].?([A-Z]*)_(.*?)_(.*?)_(.*)[\.$]

答案 1 :(得分:1)

跟进@ fge的拆分建议:

str = "SC/SCO_160ZA206_T_mlaz_kdiz_nziizjeij.ext"
p str[(str.index('/')+1)...str.rindex('.')].split( '_', 4)
#=> ["SCO", "160ZA206", "T", "mlaz_kdiz_nziizjeij"]

它在_上分割最多4个元素(第四个元素是余数)。