我要说,我对正则表达式的知识非常薄弱.我试图在java中匹配电视剧文件名,如下所示:
S01E02 bla bla
bla标题name.S03E04
季名s05e03
不管我的解决方案是如何工作的,它只是匹配名称s01e02或name.s03e03,而不是电视剧的完整名称。
我当前的正则表达式是:
(\\w+)((\\.|\\s)[sS]([0-9]{2})[eE]([0-9]{2}))
发布于 2010-11-02 13:08:52
以下是一个建议:
Pattern p = Pattern.compile("(.*?)[.\\s][sS](\\d{2})[eE](\\d{2}).*");
String[] tests = { "xyz title name S01E02 bla bla",
"bla bla title name.S03E04",
"the season title name s05e03" };
for (String s : tests) {
Matcher m = p.matcher(s);
if (m.matches())
System.out.printf("Name: %-23s Season: %s Episode: %s%n",
m.group(1), m.group(2), m.group(3));指纹:
Name: xyz title name Season: 01 Episode: 02
Name: bla bla title name Season: 03 Episode: 04
Name: the season title name Season: 05 Episode: 03发布于 2010-11-02 13:00:27
这是因为在开头有一个匹配一个单词的(\\w+)。
若要使其匹配一组由空格分隔的单词,请将其替换为:
(\\w+\\s+)+发布于 2010-11-02 13:08:08
这种模式可能会更好:
(?xi) ^ (?: \b \w+ \s*? ) + [\s.] S \d{2} E \d{2} $如果此模式是一个文字Java字符串,而不是从其他地方读取,则必须添加额外的反斜杠。
而且,这只适用于ASCII数据,而不是完整的Unicode,因为Java的regexes拒绝使用旧的regex快捷方式。那么,您必须使用Unicode属性。这是相当令人不快的,但如果可能是这样的话,请告诉我,我会更新模式,为Unicode工作。
https://stackoverflow.com/questions/4077827
复制相似问题