正则表达式找到一个电影名称

时间:2017-01-17 20:38:45

标签: java regex

我试图提出将视频文件名分组的REGEX,这样我就只能提取一个名字,然后用它来解析一些网络等。

电影的名称几乎(好吧,这可能是一个问题,我猜,因为它可能并不总是)在名字的第一个,然后有一些随机字母,数字等。

例如:

Batman.v.Superman.Dawn.of.Justice.2016.BLABLABLA-XDAWEFFF

所以它的分组如

(Batman.v.Superman.Dawn.of.Justice)(rest of the file)

然后我可以提取第一组,用空格替换点,我很高兴。

另一个例子:

Eye.in.the.Sky.2015.1080p.BluRay

成:

(Eye.in.the.Sky)(rest)

你们有没有正念我们?我不知道如何分隔它们,因为名字后面可能有任何单词,数字等。

2 个答案:

答案 0 :(得分:2)

你最好的猜测是那种

([ .\w']+?)(\W\d{4}\W?.*)

但正如评论中提到的那样,由于电影片名没有标准,而你的命名惯例也没有,所以这并不总是有效。

所以这就是它的作用,一步一步:

([ .\w']+?)

  • [ .\w']任何字符,例如 space dot ,az,AZ,0-9,_和'

  • +?必要时捕获有许多字符,直到表达式的第二部分

(\W\d{4}\W.*)

  • \W任何不是a-z,A-Z,0-9,_
  • 的事情
  • \d{4}四个数字0-9
  • \W任何不是a-z,A-Z,0-9,_
  • 的事情
  • .*任何内容,直到字符串结束

Here's an example

答案 1 :(得分:0)

如果您的String没有任何可以通过Regex定义的指定表单,则无法执行此操作。

电影的问题在于它们的名字可以包含任何内容。

要解决您的问题,您可以使用一些分隔符来确定保存时名称的结尾:

Batman.v.Superman.Dawn.of.Justice|2016.BLABLABLA-XDAWEFFF

然后你可以使用例如:

String[] s = "Batman.v.Superman.Dawn.of.Justice|2016.BLABLABLA-XDAWEFFF".split("|");