python中提供了哪几种通过正则表达式匹配字符串的方法有哪

Python014

python中提供了哪几种通过正则表达式匹配字符串的方法有哪,第1张

python中提供了3种通过正则表达式匹配字符串方法。种通过正则表达式匹配字符串的方法有以下三种。

1、贪婪匹配与非贪婪匹配:在定义用于匹配的模式串时,使用.*,则为贪婪匹配。使用.*,则为非贪婪匹配。

2、indall与search的选取问题:自己定义的模式串只能匹配到一个结果,使用search方法结合group方法可以直接得到这个字符串。自己定义的模式串能匹配到多个结果,则使用findall方法可以得到存储多个结果字符串的列表。

3、匹配时"()"和[]的用法:目标字符串‘abcde’[…]会匹配在[]内的任意一个字符,而不会匹配整个字符串。(…)会匹配在()内的整个字符串。使用search方法时则正常匹配(相当于没有()),使用findall方法时则只会匹配(…)的内容。)[]同时出现,考虑(…)式的字符串与[…]式内的字符和顺序,使用findall方法时结果会舍弃[…]内容,使用search方法时则正常匹配(相当于没有()和[])。

你的正则表达式使用了贪婪模式的匹配(.*),应该用非贪婪模式,正则表达式应该为<a href="/(.*?)-desktop-wallpapers.html

完整的python语言程序如下

#!/usr/bin/python3

 

import re

 

a = '<html><body><p>[<a href="/aero-desktop-wallpapers.html" title="Aero HD Wallpapers">Aero</a>, <a href="/animals-desktop-wallpapers.html" title="Animals HD Wallpapers">Animals</a>, <a href="/architecture-desktop-wallpapers.html" title="Architecture HD Wallpapers">Architecture</a>,Wallpapers">Artistic</a>, ........(省略)......... <a href="/vintage-desktop-wallpapers.html" title="Vintage HD Wallpapers">Vintage</a>]</p></body></html>'

titles = re.findall('<a href="/(.*?)-desktop-wallpapers.html',str(a))

print (titles)

运行结果

['aero', 'animals', 'architecture', 'vintage']

| 这个符号就是or的意思,先匹配|前方的,然后再匹配后方的。

比如1|2,意思是先匹配1,如果匹配不了就匹配2,但需要注意的是,就算匹配了1,同样还会匹配2,效果就是如你所说的,匹配两种结果。