Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python正则表达式,需要扩展名和包含字符串_Python_Regex - Fatal编程技术网

Python正则表达式,需要扩展名和包含字符串

Python正则表达式,需要扩展名和包含字符串,python,regex,Python,Regex,我想使用regex监控符合这两个要求的文件(因为我使用的是watchdog RegexMatchingEventHandler): 必须以.bson或.bson.gz(又称扩展要求)结尾,如regexes=['\.bson.?'], 文件名必须包含2017 我希望使用正则表达式作为字符串输入,而不是完整的程序 有人能提供想法吗 谢谢,您可以使用如下正则表达式捕获它们: regex = r'.*2017.*\.bson(\.gz)?$' 说明:2017年前后的*匹配任何字符,可以重复任意次数(\

我想使用regex监控符合这两个要求的文件(因为我使用的是watchdog RegexMatchingEventHandler):

  • 必须以
    .bson
    .bson.gz
    (又称扩展要求)结尾,如
    regexes=['\.bson.?'],
  • 文件名必须包含
    2017
  • 我希望使用正则表达式作为字符串输入,而不是完整的程序

    有人能提供想法吗


    谢谢,

    您可以使用如下正则表达式捕获它们:

    regex = r'.*2017.*\.bson(\.gz)?$'
    
    说明:2017年前后的
    *
    匹配任何字符,可以重复任意次数
    (\.gz)?
    指定
    .gz
    是可选的

    演示:

    In [2]: fnames = ['sdfa2017sdfa.bson', 'asdf.bson', '2017aa.bson.gz']
    
    In [3]: filtered_files = [f for f in fnames
                              if re.search(r'.*2017.*\.bson(\.gz)?$', f)]
    
    In [4]: filtered_files
    Out[4]: ['sdfa2017sdfa.bson', '2017aa.bson.gz']
    

    我尝试了
    print(重新匹配('.2017..bson(.gz)?,'2017.bson.gz')
    ,它返回
    None
    …try
    re.match(r'.*2017.\.bson(\.gz)?,'.2017..bson(.gz)?)
    。您需要将正则表达式作为
    re.match
    的第一个参数对不起,这也是错误的。。。尝试
    fnames=['sdfa2017sdfa.bson.it','asdf.bson','2017aa.bson.gz']
    ,它仍然返回
    'sdfa2017sdfa.bson.it
    所以,它应该以
    .bson
    .bson.gz
    结尾?在这种情况下,只需将
    ^
    添加到正则表达式的末尾,指定字符串应该结束。我编辑了答案以反映这一点。是的,以
    .bson
    .bson.gz
    结尾。不,你的答案也不正确。。。现在它什么也不返回。