python 正则匹配,为什么匹配结果少了7?我是用的是分组非贪婪匹配
代码如下:
url = "http://tiebapic.baidu.com/forum/w%3D580/sign=33b74ba68b11728b302d8c2af8fdc3b3/9728d9177f3e67097e8a81c87dc79f3df9dc55aa.jpg?tbpicau=2024-01-18-05_4f80cd1a7f322fc1e38464b6e05d9188" pattern = re.compile(r'http://tiebapic.baidu.com/(.+?)sign=.+?\/(.+?).(.+?)\?tbpicau=', re.S) filenames = pattern.findall(url) filename = '%s%s%s' % (filenames[0][0], filenames[0][1], filenames[0][2]) print(filename)
//输出结果:
forum/w33D580/928d9177f3e67097e8a81c87dc79f3df9dc55aa.jpg
//期望输出结果:
forum/w33D580/9728d9177f3e67097e8a81c87dc79f3df9dc55aa.jpg
为什么结果中928d9177f3e67097e8a81c87dc79f3df9dc55aa.jpg 少了7?
你的正则表达式中,re.S
修饰符被错误地放置在了正则表达式的末尾,而不是开头。re.S
修饰符是“DOTALL”的缩写,它会使得.
匹配包括换行符在内的所有字符。然而,如果你把这个修饰符放在末尾,它就会对这个正则表达式的最后一个子模式产生影响,这就是为什么你的结果中有一个部分“少了7”。
你应该把re.S
放在整个正则表达式的最前面,像这样:
pattern = re.compile(r'(http://tiebapic.baidu.com/(.+?)sign=.+?/)(.+?)\?tbpicau=', re.S)
这样,整个正则表达式就会变成贪婪匹配,而不仅仅是最后一个子模式。然后你可以像你原来那样使用findall
来获取结果:
filenames = pattern.findall(url)filename = '%s%s%s' % (filenames[0][0], filenames[0][1], filenames[0][2])print(filename)
这样你应该可以得到期望的输出结果。
本文向大家介绍什么是正则的贪婪匹配?相关面试题,主要包含被问及什么是正则的贪婪匹配?时的应答技巧和注意事项,需要的朋友参考一下 匹配一个字符串没有节制,能匹配多少就去匹配多少,知道没有匹配的为止
据我所知,非贪婪匹配不是基本正则表达式(BRE)和扩展正则表达式(ERE)的一部分。然而,不同版本的(BSD和GNU)上的行为似乎表明了另一种明智的做法。 举个例子,我们来看下面这个例子。我有一串话要说: 以下是从字符串中提取< code>hello的一些尝试。 BRE尝试(失败): 输出产生整个字符串,这表明非贪婪量词在 BRE 上不起作用。请注意,我只是转义,因为不会失去它的意义,也不需要转义
本文向大家介绍python正则表达式的懒惰匹配和贪婪匹配说明,包括了python正则表达式的懒惰匹配和贪婪匹配说明的使用技巧和注意事项,需要的朋友参考一下 第一次碰到这个问题的时候,确实不知道该怎么办,后来请教了一个大神,加上自己的理解,才了解是什么意思,这个东西写python的会经常用到,而且会特别频繁,在此写一篇博客,希望可以帮到一些朋友。 例:一个字符串 “abcdacsdnd” ①懒惰匹配
本文向大家介绍js正则表达式惰性匹配和贪婪匹配用法分析,包括了js正则表达式惰性匹配和贪婪匹配用法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了js正则表达式惰性匹配和贪婪匹配用法。分享给大家供大家参考,具体如下: 在讲贪婪模式和惰性模式之前,先回顾一下JS正则基础: 写法基础: ①不需要双引号,直接用//包含 => /wehfwue123123/.test(); ②反斜杠\表示转义
本文向大家介绍python re模块匹配贪婪和非贪婪模式详解,包括了python re模块匹配贪婪和非贪婪模式详解的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了python re模块匹配贪婪和非贪婪模式详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 python贪婪和非贪婪 正则表达式通常用于在文本中查找匹配的字符串。Pytho
考虑字符串。如何以非贪婪的方式(在awk中)匹配和之间的内容? 我尝试了以下方法: 没有输出。我相信不匹配的原因是“”和之间的字符数为奇数。如果我用替换 ,正则表达式似乎可以工作。