gpt4 book ai didi

java - 多片段文件名的正则表达式模式

转载 作者:行者123 更新时间:2023-11-30 03:51:28 25 4
gpt4 key购买 nike

我正在尝试编写正则表达式来从文件名获取有关电视节目剧集的数据。

我将首先展示一些我正在处理的输入类型以及我希望如何输出数据的示例。

输入:

  • showname.s01e01e02e03.扩展名
  • showname.s01e01-02-03.扩展名

注意:剧集数量可能有所不同,但至少为 2 集。

输出:

  • 季节编号,即 s01 中的“01”
  • 剧集编号,即 01e02e03 或 01-02-03

注意:如果可以使用正则表达式获取单独的剧集编号,那就太好了 - 如果不能,我只会将它们分开。

我尝试过的:

我是not really that great with regular expressions ,所以我目前的尝试可能很糟糕。无论如何,这是我到目前为止所得到的 - 显然不起作用:

(?i)s(?<season>\\d{1,4})(e(\\d{1,3})){2,}

我的想法是为季号创建一个组(该部分有效),然后尝试根据重复次数来匹配剧集编号,但是,是的,现在是凌晨 3.41 点,我实在无法理解它。

一个完整的解决方案会很好,但是任何想法或指示都非常感谢:-)

PS。如果接受的答案包含正则表达式的解释,我将添加赏金,以帮助我自己和其他人学习。

最佳答案

(我和你住在同一时区,所以我的尝试也可能不准确,因为我半睡半醒,但我走了)

如果我理解正确的话(也试图分析你的正则表达式尝试)

  • 部分sXXXXeXXXeXXXsXXXXeXXX-XXX总是位于点之间
  • sXXXX只能存在一次,但可以有 1-4 位数字(此处用 X 表示),
  • 必须有eXXX季后信息的一部分,至少是表格中的元素之一 eXXX-XXX (每个只能包含 1-3 位数字)。

在这种情况下,您可以使用正则表达式,如

[.]s(?<season>\\d{1,4})e(?<episodes>\\d{1,3}([e-]\\d{1,3})+)[.]

这意味着

  • [.]点文字

  • s(?<season>\\d{1,4})将匹配sXXXX并将其存储在名为 season 的组中

  • e文字放置在季节信息之后(从您的示例来看似乎是强制性的)

  • (?<episodes>\\d{1,3}([e-]\\d{1,3})+)在这种情况下

    • \\d{1,3}将匹配XXX
    • ([e-]\\d{1,3})+以及 eXXX 中的至少一项或-XXX之后。

    换句话说,它将匹配 XXXeXXX , XXX-XXX甚至类似 XXXeXXX-XXX并将其放入名为 episodes 的组中

  • [.]点文字放置在搜索信息之后

如果您想要一些具有分隔的剧集列表的结构,那么您只需要从名为 episodes 的组中拆分匹配即可。 。由于此匹配可以采用 XXXeXXX-XXX 的形式你可以直接分割e-可以用正则表达式 [e-] 表示或e|-

演示:

String[] data = {
"showname.s01e01e02e03.extension",
"showname.s01e01-02-03.extension",
};
Pattern p = Pattern.compile(
"[.]s(?<season>\\d{1,4})e(?<episodes>\\d{1,3}([e-]\\d{1,3})+)[.]",
Pattern.CASE_INSENSITIVE);
for (String input : data){
Matcher m = p.matcher(input);
while (m.find()){
String season = m.group("season");
System.out.println(season);
String episodes = m.group("episodes");
System.out.println(m.group("episodes"));
String[] singleEpisodes = episodes.split("[e-]");

System.out.println("episode numbers"+Arrays.toString(singleEpisodes));
}
System.out.println("-----");
}

输出:

01
01e02e03
episode numbers[01, 02, 03]
-----
01
01-02-03
episode numbers[01, 02, 03]
-----

关于java - 多片段文件名的正则表达式模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24347431/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com