Regex Perl:帮助编写正则表达式
我正在尝试为以下3种情况编写一个通用正则表达式:Regex Perl:帮助编写正则表达式,regex,perl,Regex,Perl,我正在尝试为以下3种情况编写一个通用正则表达式: 超自然的_S07E23_720p_HDTV_X264-DIMENSION.mkv .listener.313.480p.hdtv.x264-2hd.mkv How.I.met.your.mother.s02e07.hdtv.x264-xor.avi 现在,我的正则表达式应该从原始字符串中删除序列名,即上述字符串的输出将是: S07E23_720p_HDTVx264-DIMENSION.mkv 313.480p.hdtv.x264-2hd.m
- 超自然的_S07E23_720p_HDTV_X264-DIMENSION.mkv
- .listener.313.480p.hdtv.x264-2hd.mkv
- How.I.met.your.mother.s02e07.hdtv.x264-xor.avi
- S07E23_720p_HDTVx264-DIMENSION.mkv
- 313.480p.hdtv.x264-2hd.mkv
- s02e07.hdtv.x264-xor.avi
$string =~ s/^(.*?)[\.\_\- ]//i; #delimiter can be (. - _ )
因此,我不知道如何继续处理我按照\w+{1,6}
思路思考的上述案例,但它也没有完成所需的工作
PS:解释正则表达式所做的事情将被理解。
< p>您可以检测到下一个标记是否包含数字,如果不是,将其视为名称的一部分。 然而,我个人认为没有完美的解决方案。它仍然会遇到一些问题,比如:24.313.480p.hdtv.x264-2hd.mkv // 24
Warehouse.13.s02e07.hdtv.x264-xor.avi // warehouse 13
正如斯坦利兹所说,你总是会因为名字中包含数字而陷入麻烦 但是,如果您选择这些特殊情况,您可以尝试:
#perl
$\=$/;
map {
if (/^([\w\.]+)[\.\_]([SE\d]+[\.\_].*)$/i) {
print "Match : Name='$1' Suffix='$2'";
} else {
print "Did not match $_";
}
}
qw!
Supernatural_S07E23_720p_HDTV_X264-DIMENSION.mkv
the.listener.313.480p.hdtv.x264-2hd.mkv
How.I.met.your.mother.s02e07.hdtv.x264-xor.avi
!;
哪些产出:
Match : Name='Supernatural' Suffix='S07E23_720p_HDTV_X264-DIMENSION.mkv'
Match : Name='the.listener' Suffix='313.480p.hdtv.x264-2hd.mkv'
Match : Name='How.I.met.your.mother' Suffix='s02e07.hdtv.x264-xor.avi'
注意:你不是在做违法的事情吗?;) 你怎么知道你的电影名字什么时候结束?最后一个分隔符是
或-
,但电影名称本身由这两个分隔符分隔。@Cupidvogel:您可以看到模式moviename
后跟分隔符后跟S07E23或313或s02e07或3x13
。所以你几乎可以说MovieName后面会有一个模式,比如[S | S]?\d+[\.\.\\.\uux]?[e | e]\d+
@ronnie:试试这个^[\.\d]+[\.\u\-]。它应该与完整的字符标题一起使用。字符类[-.\u]
会删除那些难看的反斜杠。点在字符类中并不特殊,因为除了-
,^
和反斜杠字母字符之外,它什么都不是。在正则表达式中是\。
在\D
@ronnie之前是必需的,你说得对\D够了,我太粗心了。顺便问一下,如果答案对你有帮助的话,你能接受吗?没错,观察这一集的模式,制作案例,如果你真的需要的话,把它转换成结构性的。