你看看想要的是不是这个:
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 BeautifulSouphtml='''
<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 在终端里安装后才可以用的