我正试着从标题中得到电视剧的季号和集号
我试着使用下面的代码,但它也将像xxxxe 3这样的标题作为第3集。
$episode = $title | Select-String -Pattern "E(\d+)", "E (\d+)", "Episode (\d+)" | % {$_.Matches.Groups[1].Value}
$season = $title | Select-String -Pattern "S(\d+)", "S (\d+)", "Season (\d+)" | % {$_.Matches.Groups[1].Value} 如何确保我可以从这些格式中挑选出季号和集。
H 110xxx第01季H 211F 212
如果节目标题中没有上面的赛昂或剧集编号,我只想不返回任何内容,例如,如果节目被命名为"xxxxxE 1“
发布于 2021-11-11 16:32:39
假设以下情况
numbers
我建议用regex模式锚定到名称的末尾。从这里开始,我们在句点(文件扩展名)之前占了0或多个字符,在句号和插集之间占了1个文字句号(扩展名),在句号和插集之间占了0或多个字符,在季节和插集之间占了0或多个字符。
$examples = @'
xxx S01E02.avi
xxxe 1 S02E03.mp3
xxx S03 E04.mov
xxx 04x05.png
xxx Season 05 Episode 06.wav
'@ -split [environment]::NewLine
$examples | ForEach-Object {
if($_ -match '.+(\d{2,}).*(\d{2,}).*\..*$'){
"Season: {0} Episode: {1}" -f $matches.1,$matches.2
}
}这将输出
Season: 01 Episode: 02
Season: 02 Episode: 03
Season: 03 Episode: 04
Season: 04 Episode: 05
Season: 05 Episode: 06您没有显示如何填充$title,因此假定它只是一个字符串。但是,如果您想应用于文件对象,则有几个选项。
我们可以不使用regex模式,并使用Name属性。
$videolist = Get-Childitem -Path path\to\movies -Filter *.whatever
foreach($video in $videolist){
if($video.Name -match '.+(\d{2,}).*(\d{2,}).*\..*$'){
"Season: {0} Episode: {1}" -f $matches.1,$matches.2
}
}或
我们可以使用BaseName属性并稍微调整正则表达式。
$videolist = Get-Childitem -Path path\to\movies -Filter *.whatever
foreach($video in $videolist){
if($video.BaseName -match '.+(\d{2,}).*(\d{2,}).*$'){
"Season: {0} Episode: {1}" -f $matches.1,$matches.2
}
}https://stackoverflow.com/questions/69931530
复制相似问题