正则表达式:在下一组匹配时如何包含上一组中的字符

问题描述 投票:0回答:1

我有以下正则表达式:

(.+)([) ._-]+[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)
-
)
与第二组中包含的第一组相匹配? (但是任何其他可能的字母都不会出现在第一组中。我不在乎它们是否在第二组中)

regex
1个回答
0
投票

您可以使用交替来匹配空格、

.
_
-
,或者紧接在
)
之后的位置:

^(.+)((?:[ ._-]|(?<=\)))[a-z])()(\.[^.]+)$
      ^^^^^^^^^^^^^^^^^

请参阅正则表达式演示。请注意使用的

i
标志,因此在代码中,您还需要使用大小写忽略标志或选项。

详情

  • ^
    - 字符串的开头
  • (.+)
    - 第 1 组:除换行符之外的一个或多个字符,尽可能多
  • ((?:[ ._-]|(?<=\)))[a-z])
    - 第 2 组:空格、
    .
    _
    -
    ,或者紧接在
    )
    之后的位置,然后是 ASCII 字母
  • ()
    - 空的第 3 组(您的代码需要,如果代码可以调整,则不需要)
  • (\.[^.]+)
    - 第 4 组:
    .
    ,然后是除
    .
  • 之外的一个或多个字符
  • $
    - 字符串结尾。
© www.soinside.com 2019 - 2024. All rights reserved.