当前位置: 首页 > 面试题库 >

正则表达式在Pythex上运行良好,但在Python中却无法正常运行

蒋茂
2023-03-14
问题内容

我在pythex上使用了以下正则表达式进行测试:

(\d|t)(_\d+){1}\.

它工作正常,我主要对第2组感兴趣。成功显示如下:

pythex演示

但是,我无法让Python真正向我显示正确的结果。这是MWE:

fn_list = ['IMG_0064.png',
           'IMG_0064.JPG',
           'IMG_0064_1.JPG',
           'IMG_0064_2.JPG',
           'IMG_0064_2.PNG',
           'IMG_0064_2.BMP',
           'IMG_0064_3.JPEG',
           'IMG_0065.JPG',
           'IMG_0065.JPEG',
           'IMG-20150623-00176-preview-left.jpg',
           'IMG-20150623-00176-preview-left_2.jpg',
           'thumb_2595.bmp',
           'thumb_2595_1.bmp',
           'thumb_2595_15.bmp']

pattern = re.compile(r'(\d|t)(_\d+){1}\.', re.IGNORECASE)

for line in fn_list:
    search_obj = re.match(pattern, line)
    if search_obj:
        matching_group = search_obj.groups()
        print matching_group

输出为空。

但是,上面的pythex清楚地显示了每个返回的两个组,第二个应该存在并且产生了更多文件。我究竟做错了什么?


问题答案:

您需要使用re.search(),不re.match()re.search()匹配字符串中的任何地方,而re.match()仅匹配开头。

import re

fn_list = ['IMG_0064.png',
           'IMG_0064.JPG',
           'IMG_0064_1.JPG',
           'IMG_0064_2.JPG',
           'IMG_0064_2.PNG',
           'IMG_0064_2.BMP',
           'IMG_0064_3.JPEG',
           'IMG_0065.JPG',
           'IMG_0065.JPEG',
           'IMG-20150623-00176-preview-left.jpg',
           'IMG-20150623-00176-preview-left_2.jpg',
           'thumb_2595.bmp',
           'thumb_2595_1.bmp',
           'thumb_2595_15.bmp']

pattern = re.compile(r'(\d|t)(_\d+){1}\.', re.IGNORECASE)

for line in fn_list:
    search_obj = re.search(pattern, line)  # CHANGED HERE
    if search_obj:
        matching_group = search_obj.groups()
        print matching_group

结果:

('4', '_1')
('4', '_2')
('4', '_2')
('4', '_2')
('4', '_3')
('t', '_2')
('5', '_1')
('5', '_15')

由于您要编译正则表达式,因此可以search_obj = pattern.search(line)代替search_obj = re.search(pattern, line)。至于您的正则表达式本身,r'([\dt])(_\d+)\.'它等同于您正在使用的正则表达式,并且更加简洁。



 类似资料:
  • 我开发了一个html页面,其中两个输入文本框以两个地址作为开始和结束位置。一个按钮(提交)用于显示谷歌地图(使用谷歌地图api)中的位置路径,页面右侧将显示方向说明和总距离。它在.html(扩展名)页面中工作正常,但在我的asp.net页面(.aspx)扩展名中不工作。下面给出了我的代码。问题在哪里?帮助我。为达到要求,请提供任何建议。我在my_API_密钥中尝试了不同类型的脚本链接。https:

  • 我创建了一个JasperReport应用程序,它在tomcat服务器上运行良好。但是当我使用相同的jar在Jboss上运行时,它会显示错误 原因:java.lang.ClassCastException:org.apache.xerces.jaxp.DocumentBuilderFactoryImpl无法强制转换为javax.xml.parsers.DocumentBuilderFactor.ne

  • 我一直在将泽西v2.19与Google AppEngine v1.9.22一起使用,它在本地devserver中运行良好,没有任何问题,但当我尝试将应用程序部署到appEngine时。我得到了多个异常 使用的框架: AppEngineJava1.9.22 泽西2.19 具体化5.1.5 Guice 3. x 格拉德勒 以下是我在日志中得到的例外: org.glassfish.jersey.inte

  • 当我执行时 在控制台(javascript)中,它通过类名返回元素,但是当我执行时: < code > driver . find elements(by . class name(" jobs-company-card _ _ content-wrapper ")); 结果(元素)是一个空的列表,注意返回

  • 问题内容: 我更改了使用.ajax方法而不是.load的实现,它在Firefox中可以正常工作,但在IE7或IE6中却不能: 为了达到目标,这已经使我丧命。 任何想法,我要去哪里错了? 问题答案: 我不小心弄清楚了问题所在。 此变量中引用的链接: 最后有一个哈希值,如下所示: 这会导致AJAX在IE的两个版本中掉落。 使用以下代码: 盖茨摆脱它,现在可以工作了:)

  • 问题内容: 这个问题已经在这里有了答案 : 字符串替换方法不替换字符 (5个答案) 2年前关闭。 我正在尝试将所有特殊字符替换为“%”,例如: 我的正则表达式是: 在在线工具中*它可以正常运行,但在Java中 弦保持不变。 *我尝试过:http : //www.regexplanet.com/ http://regex101.com/和其他 问题答案: 字符串是不可变的。您忘了将新变量重新分配给: