正则表达式是一种可以用于模式匹配和替换的工具,可以让用户通过使用一系列的特殊字符构建匹配模式,然后把匹配模式与待比较字符串或文件进行比较,根据比较对象中是否包含匹配模式,执行相应的程序(替换删除等)。
python只支持re模块进行正则表达式的书写
import re
example_obj = "1. A small sentence. - 2. Another tiny sentence. "
re.findall('sentence',example_obj)#第一个参数为想要查找的字符,第二个参数为被查找的句子
re.search('sentence',example_obj)
re.sub('sentence','SENTENCE',example_obj)
re.match('.*sentence',example_obj)
import re
string = "1. A small sentence. - 2. Another tiny sentence."
re.findall('sentence',string)#把所有符合要求的提取出来
>>>['sentence', 'sentence']
re.search('sentence',string)#只返回一个位置(第一个找到就停止搜索)可能遍历更快
>>><_sre.SRE_Match object; span=(11, 19), match='sentence'>
re.match('sentence',string)#该方法必须被查询语句的首字母就为查询字段,此时才会有相应结果的返回
re.match('1. A small sentence.',string)
>>><_sre.SRE_Match object; span=(0, 20), match='1. A small sentence.'>
替换
sub(pattern, repl, string)
re.sub('small','large',string)
>>>'1. A large sentence. - 2. Another tiny sentence.'
删除
将repl的参数换为空 ‘ ’
正则表达式的威力来源于能够编写灵活及广义化的查询条件
re.findall('small',example_obj)
re.findall('s.all',example_obj)
re.findall('s[a-z]all',example_obj)
re.findall('small|tiny',example_obj)
s = 'small smell sm.ll sm?ll sm\nll'
re.findall('sm.ll',s)
>>>['small', 'smell', 'sm.ll', 'sm?ll']
(2)字符类“[]”:被包含在中括号内部,任何中括号内的字符都会被匹配;
如果想要查找sm.ll
法一
s = 'small smell sm.ll sm?ll sm\nll'
re.findall('sm\.ll',s)
法二
s = 'small smell sm.ll sm?ll sm\nll'
re.findall('sm[.]ll',s)
法三
s = 'small smell sm.ll sm?ll sm\nll'
re.findall('sm\wll',s)
[]中唯一一个需要转义的符号为‘-’(转义方式加反斜杠)
(3)管道“|”:该字符被视为OR操作;
部分有特殊含义的符号 | 含义 |
---|---|
\w | 数字和字母字符:[0-9a-zA-Z] |
\W | 与\w反义 |
\s | 空白字符 |
\S | 非空白字符 |
\d | 数字:[0-9] |
\D | 非数字:[^0-9] |
\b | 单词的边界 |
\B | 非单词边界 |
Python正则表达式里的量化符 | 说明 |
---|---|
? | 前面的元素是可选的,并且最多匹配1次 |
* | 前面的元素会被匹配0次或多次 |
+ | 前面的元素会被匹配1次或多次 |
{n,} | 前面的元素至少会被匹配n次 |
{n,m} | 前面的元素至少匹配n次,至多匹配m次 |
import re
example_obj = "1. A small sentence. - 2. Another tiny sentence."
re.sub('\\d','kkk','abc12de')
re.sub('[0-9]','kk','abc12de')
re.sub('\w','kk','abc,12de')
re.sub('\w{2}','kk','abcbe 12de')
re.findall('[b-z]+',example_obj)
res=re.findall('\\b[b-z]+\\b',example_obj)
import requests
import re
url = 'http://www.tipdm.com/tipdm/index.html'
rq = requests.get(url)
rq.encoding = 'utf-8'
re.findall('(.+) ',rq.text)#括号表示提取里面的内容
>>>['产品中心', '关于我们']
使用正则表达式无法很好的定位特定节点并获取其中的链接和文本内容,而使用Xpath和Beautiful Soup能较为便利的实现这个功能