正则表达式以随机顺序进行多重匹配

时间:2015-11-25 16:25:18

标签: python regex

我可以有这样的字符串:

movie = '007: Spectre English Trailer #3 2015'
or
007: Spectre (2015) English Trailer
or
007: Spectre 2015 Trailer 2
etc.

目前我有下一段代码:

lang = 'english'
year = 2015
video_type = 'trailer'
num = 3 # for example '3', but can be any

my_list = []

if re.search(video_type+r'\s+((?#|№)['+str(num)+']\D)', movie, re.IGNORECASE):
    my_list.append(movie)

检查字符串中是否存在video_typenum预告片。

如何将langyear添加到正则表达式,以检查langyearvideo_typenum是否在一起串?换句话说,我需要检查字符串是否包含所有这些变量。

有些想法:

if (lang in movie) and (year in movie) and (video_type in movie) and (num in movie):
    my_list.append(movie)

所有这些变量都可以在字符串的随机位置(video_typenum除外,因为它们总是彼此靠近,上面的代码可以正常工作)。

尝试过这样的事情:

1 个答案:

答案 0 :(得分:0)

您的评论表明您真正关心的是字符串中的任何地方都存在以下字段:

  • lang
  • year
  • video_type numvideo_type #numvideo_type №num

您应该使用正则表达式来检测最后一个,但其他人应该只是一个简单的in检查。

m = movie.casefold()  # .lower() in earlier versions before 3.3
if all([lang in m,
        year in m,
        re.search(r"{} (?:#|№)?{}(?=\D|$)".format(video_type, num), m)]):
    # do something

这相当于:

if lang in m and year in m and re.search(r"{} (?:#|№)?{}(?=\D|$)".format(video_type, num), m):

但是更具可读性