Regex 从字符串中提取电影名称和年份是可选的

Regex 从字符串中提取电影名称和年份是可选的,regex,movie,Regex,Movie,我在这里错过了一件非常明显的事情,但我对regex还不熟悉,所以要友善;-) 我有一些任意格式的电影,可能有也可能没有附上年份 My Movie Name 2010 Some.Other.Super.Cool.Movie The~Third|Movie.2010 现在,使用(.+)\W(\d{4})我可以将两部有日期的电影分为两组,一组包含名字,另一组包含年份,但中间的一部被忽略了?我只是有点不确定如何真正使年度部分可选 理想情况下,;-),我可以使用单个表达式返回名称,\W转换为空格,但这是

我在这里错过了一件非常明显的事情,但我对regex还不熟悉,所以要友善;-)

我有一些任意格式的电影,可能有也可能没有附上年份

My Movie Name 2010
Some.Other.Super.Cool.Movie
The~Third|Movie.2010
现在,使用
(.+)\W(\d{4})
我可以将两部有日期的电影分为两组,一组包含名字,另一组包含年份,但中间的一部被忽略了?我只是有点不确定如何真正使年度部分可选

理想情况下,;-),我可以使用单个表达式返回名称,\W转换为空格,但这是另一个对话


提前感谢

使用?在(\d{4})之后,字符组将使其成为可选的

这是因为您在(++)上使用贪婪匹配,并且\W在其集合中包含新行字符(我认为至少是这样)。去掉字符串后面的空白,如果不起作用,用一个?它自己的,(?+)-也考虑到W可能是这个问题的错误定界符。< /P> 另外,在末尾添加$可能会有所帮助,因为这需要数字来结束函数。如果可以,请尝试延迟匹配和$

(.+?)\W(\d{4})?$

使其成为可选的

(.+?)\W?(\d{4})?$

你打算如何处理电影以4个数字结尾的电影?例如,1975年出版的《死亡竞赛2000》。如果你有“死亡赛跑2000 1975”,你很好,但是“死亡赛跑2000”呢?我以前确实试过,但RegExbuddy告诉我,我的电影名是2010,Some.Other.Super.Cool.Movie,第三部电影在第一组,空白,空白,第二组是2010??
(.+?)\W?(\d{4})?$