python 正则 多行匹配问题?

Python010

python 正则 多行匹配问题?,第1张

你看看想要的是不是这个:

ret = re.findall(r'/begin([^/]*)/end',content,re.S)

.*会匹配所有字符,所以你那个会匹配第一个/begin和最后一个/end,包括之间的所有/begin, /end. 我这样写,不允许中间出现/,就没问题了。

如果你所指得[任意文字]的意思是1个或1个以上文字得话

你可以试试下面得语句

p = re.compile(u'.*想知道.+\n.+也想知道.+')

否则你只需要将里面得"+"改为"*"就可以匹配0得情况

也就是下面得语句

p = re.compile(u'.*想知道.*\n.*也想知道.*')

测试代码如下:

>>>a = u"""我想知道。

..... 我也想知道。"""

>>>p.search(a)

>>><_sre.SRE_Match object at 0x1014d5100>

看了你的问题补充,如果你想要查找出字符串中最后匹配的子字符串的话,我目前没想到比较好的办法。

如果一定要用正则的话你可以考虑采用遍历的方式,也就是匹配所有不含abc的情况。

比如说^a, ^b, ^c, ab^c, a^bc....等等等等。不过这样以来正则表达式会显得过于复杂,而且扩展行几乎为0。

如果可以不用正则,那python本身的库就能够实现(可能你嫌处理语句过多或考虑到时间问题而不想用),而且逻辑也较为简单(我觉得是这样)。python的string类中自带有find()和rfind()方法再加上split()方法,合理使用的话应该能找出所有的匹配子字符串。

用第三方库BeautifulSoup轻松搞定:

代码:

from bs4 import BeautifulSoup

html='''

<tr>

<td align="right" bgcolor="#EFF2FB" class="blues">中文名字:</td>

<td align="left" bgcolor="#F8F9FD">小明</td>

</tr>

'''

cont=BeautifulSoup(html)

print(cont.find_all('td')) #查询对象里的td标签以及td标签内容

print(cont.find_all('td')[0]) #打印匹配对象第一行

print(cont.find_all('td')[1])  #打印匹配对象第二行

print(cont.find_all('td')[0].string)  #打印匹配对象第一行里的字符串内容

print(cont.find_all('td')[1].string)  #打印匹配对象第二行里的字符串内容

结果:

补充,由于BeautifulSoup是第三方库,所以先要用pip 或者easy_install 在终端里安装后才可以用的