我有以下正则表达式:
(.+)([) ._-]+[a-z])()(\.[^.]+)$
我希望它匹配以
)
.
_
-
之一结尾(扩展名之前)的文件名,后跟一个字母。
使用此示例(使用不区分大小写的匹配)
The.Chronicles-A.mp4
与
匹配Group 1 The.Chronicles
Group 2 -A
这就是我想要的。 但是如果我有(字母之前的单个字符是
)
)
The.Chronicles.(2001)A.mp4
我明白了
Group 1 The.Chronicles.(2001
Group 2 )A
有没有办法修改正则表达式,以便在第二个示例中组 1 是
The.Chronicles.(2001)
- )
与第二组中包含的第一组相匹配? (但是任何其他可能的字母都不会出现在第一组中。我不在乎它们是否在第二组中)
您可以使用交替来匹配空格、
.
、_
或-
,或者紧接在)
之后的位置:
^(.+)((?:[ ._-]|(?<=\)))[a-z])()(\.[^.]+)$
^^^^^^^^^^^^^^^^^
请参阅正则表达式演示。请注意使用的
i
标志,因此在代码中,您还需要使用大小写忽略标志或选项。
详情:
^
- 字符串的开头(.+)
- 第 1 组:除换行符之外的一个或多个字符,尽可能多((?:[ ._-]|(?<=\)))[a-z])
- 第 2 组:空格、.
、_
或 -
,或者紧接在 )
之后的位置,然后是 ASCII 字母()
- 空的第 3 组(您的代码需要,如果代码可以调整,则不需要)(\.[^.]+)
- 第 4 组:.
,然后是除 .
$
- 字符串结尾。