|
我想要匹配每一个<tr>里面的头两个<td>,用python的正则加findall函数便可实现。但是要想获取类似字典一样的匹配(即可以通过group('key')类似的形式获取值得话),我需要对正则进行进一步改造。
我写的正则为
r'''<td>(?P<number>\d+)</td>.*?<td><a>(?P<name>\w+)</a></td'''
(?P<name>...)的形式是用命名的形式分组,可以生成对应name的字典
实现功能的全部代码是
r = re.compile(r'''<td>(?P<number>\d+)</td>.*?<td><a>(?P<name>\w+)</a></td''', re.S)
result = re.finditer(r, content)
print [m.groupdict() for m in result]
得到的最终结果
[{'number': '60', 'name': 'leeliao'}, {'number': '61', 'name': 'luo321654'}]
这里的groupdict是返回匹配到的所有命名子组的字典,至于为什么不用findall呢,这是因为findall最后返回的是匹配到的字符元组,类似
[('60', 'leeliao'), ( '61', 'luo321654')]
而finditer返回一个正则匹配的一个对象。
具体可以参考
http://stackoverflow.com/questions/3765024/different-behavior-between-re-finditer-and-re-findall
正则是一个强大的工具,需要我慢慢摸索学习,以此文记录学习的过程。
有错漏之处,欢迎指正。
参考文章:
http://junlee.blog.51cto.com/228061/555895
http://stackoverflow.com/questions/11103856/re-findall-which-returns-a-dict-of-named-capturing-groups
https://docs.python.org/2/library/re.html
创建连续的list
L = range(1,5) #即 L=[1,2,3,4],不含最后一个元素
L = range(1, 10, 2) #即 L=[1, 3, 5, 7, 9]
L = range(4, 0 ,-1) #即L=4,3,2,1
list的方法
L.append(var) #追加元素
L.insert(index,var)
L.pop(var) #
返回
最后一个元素,并从list中删除之
L.remove(var) #删除第一次出现的该元素
L.count(var) #该元
List<String> strs = new ArrayList<String>();
Pattern p = Pattern.compile("\\d+,\\d+");
Pattern p2 = Pattern.compile("\\d+");
Matcher m = p.matcher(ik);
正则
表达式是一个很强大的字符串处理工具,几乎任何关于字符串的操作都可以使用
正则
表达式来完成,作为一个爬虫工作者,每天和字符串打交道,
正则
表达式更是不可或缺的技能,
正则
表达式的在不同的语言中使用方式可能不一样,不过只要学会了任意一门语言的
正则
表达式用法,其他语言中大部分也只是换了个函数的名称而已,本质都是一样的。下面,我来介绍一下
python
中的
正则
表达式是怎么使用的。
首先,
python
近期做序列标注任务,需要用到
正则
表达式,找出满足条件的
文本
和对应索引,并进行标注。对 re.findall re.search re.finditer功能整理如下。
1、re.search
返回
第一个匹配到的
文本
和对应索引
import re
pattern = re.compile('(\d*).(duck|chicken)')
s='there are 3 duck and 10 chicke...
同样功能用HTMLParser实现了一下:from HTMLParser import HTMLParserfrom htmlentitydefs import name2codepointclass MyHTMLParser(HTMLParser):def __init__(self):self.input_tag_d = {}HTMLParser.__init__(self)# super(M...
for k, v in dct230.items():
print(k)
k2 = re.sub(r"([\u4e00-\u9fa5])([\u4e00-\u9fa5])([\u4e00-\u9fa5]{0,1})", r"\1*\3", k)
print(k2)
dct230[k2] = .
想象一下,我们有一个
字典
:{‘Hello World’:value1,’Testing’:value2}现在我们需要在
字典
中查找单词.密钥K需要与’Hello World’或’Testing’完全匹配才能使用.所以让我们的text =’hello world’我们仍然希望它
返回
value1那么我们如何处理
文本
与键的
正则
表达式匹配?理想情况下,我们不想迭代
字典
编辑:间距方面只是一个简单的例子.
文本
可...