我正在尝试使用正则表达式提取字符串的一部分。我有以下字符串案例:
case1: Warehouse.13.season01episode01.hdtv.xor.avi
case2: Warehouse.13.s01e01.hdtv.xor.avi
case3: Warehouse.13.01x01.hdtv.xor.avi
上述delimter(.)
字符串中的 可以替换为\s - _
。
正在使用的逻辑是检查是否s or season
按数字预先确定(后视)并提取它之前的所有内容,但由于后视需要绝对长度,我反转了字符串并使用前瞻。
现在对于 case1,我创建了下面的正则表达式,它可以正常工作并输出Warehouse.13
。
.*?\d{1,2}e\d{1,2}s\.(?=\d+)(.*)
现在对于case2,我使用了:
.*?\d{1,2}edosipe\d{1,2}nosaes\.(?=\d+)(.*) # works fine.
现在,当我尝试将上述两种情况 + 可选分隔符结合起来时,例如:
.*?\d{1,2}[e|edosipe]?[._ x\-]?\d{1,2}[s|nosaes]?[._\- ]?(?=\d+)(.*)
在上述情况下,您可以观察到大多数事情都是可选的(?)。它适用于case3。
使用上面的正则表达式与 case2 不匹配,但对 case1 和 case3 工作正常。
知道这里有什么问题。
PS:我知道可能还有其他可能的字符串会违反上述正则表达式,但目前对它们不感兴趣。