我试图使用正则表达式提取字符串的一部分.我有以下字符串的情况:
case1: Warehouse.13.season01episode01.hdtv.xor.avi
case2: Warehouse.13.s01e01.hdtv.xor.avi
case3: Warehouse.13.01x01.hdtv.xor.avi
Run Code Online (Sandbox Code Playgroud)
的delimter(.)在上述字符串可以被替换\s - _.
我使用的逻辑是检查是否s or season按数字预先(lookbehind)并提取它之前的所有内容但是因为后视需要绝对长度我反转了字符串并使用了它.
现在对于case1我创建了下面的正则表达式,它工作正常和输出Warehouse.13.
.*?\d{1,2}e\d{1,2}s\.(?=\d+)(.*)
Run Code Online (Sandbox Code Playgroud)
现在我使用case2:
.*?\d{1,2}edosipe\d{1,2}nosaes\.(?=\d+)(.*) # works fine.
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试将上述两种情况+可选的分隔符组合起来时:
.*?\d{1,2}[e|edosipe]?[._ x\-]?\d{1,2}[s|nosaes]?[._\- ]?(?=\d+)(.*)
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,您可以观察到大多数事情都是选择性的(?).它适用于案例3.
使用上面的正则表达式与case2的任何内容都不匹配,但对case1和case3工作正常.
知道这里有什么问题.
PS:我知道可能有其他可能的字符串会违反上述正则表达式但目前对它们不感兴趣.
[e|edosipe]并[s|nosaes]应(e|edosipe)和(s|nosaes),或(?:e|edopise)和(?:s|nosaes),如果你不想要的正则表达式引擎捕捉它们扰乱了你的会计$1,$2等等.
这里,(...)括号分组与Perl中的任何其他表达式一样.
[...]定义一个字符类.具体而言,[s|nosaes]与单个字符匹配要么是a,e,n,o,s,和(或许令人惊奇的,但元字符特殊含义通常被忽略内[...]), |.
| 归档时间: |
|
| 查看次数: |
126 次 |
| 最近记录: |