正则表达式(re)
- 模糊匹配,是一个计算机科学的概念
- 用字符来匹配,匹配符合某个规则的字符串
- 写法
-
.(点号):表示任意一个字符,除了\n, 比如查找所有的一个字符 .
-
[]: 匹配中括号中列举的任意字符,比如[L,Y,0] , LLY, Y0, LIU
-
\d: 任意一个数字
-
\D:除了数字都可以
-
\s:表示空格,tab键
-
\S:除了空白符号
-
\w: 单词字符, 就是a-z, A-Z, 0-9, _
-
\W: 除了
-
*: 表示前面内容重复零次或者多次, \w*
-
+: 表示前面内容至少出现一次
-
?: 前面才出现的内容零次或者一次
-
{m,n}:允许前面内容出现最少m次,最多n次
-
^:匹配字符串的开始
-
$:匹配字符串的结尾
-
\b:匹配单词的边界
-
():对正则表达式内容进行分组, 从第一个括号开始,编号逐渐增大
验证一个数字: ^\d$ 必须有一个数字,最少一位:^\d+$ 只能出现数字,且位数为5-10位: ^\d{5,10}$ 注册者输入年龄,要求16岁以上,99岁以下: ^[16-99]$ 只能输入英文字符和数字: ^[A-Za-z0-9]$ 验证qq号码: [0-9]{5,12}
-
\A: 只匹配字符串开头, \Aabcd, 则abcd
-
\Z: 仅匹配字符串末尾, abcd\Z, abcd
-
|: 左右任意一个
-
(?P…): 分组,除了原来的编号再制定一个别名, (?P12345){2}, 1234512345
-
(?P=name): 引用分组,
- 使用步骤
- 使用compile将正则的字符串编译为一个pattern对象
- 通过pattern对象提供一系列的方法对文本进行查找匹配获得匹配结果
- 最后使用match对象提供的属性和方法获得信息,根据需要进行操作
- 常用函数
- group():获得括号内匹配的多个字符串,以组分别匹配的括号
- start():获取分组匹配的字符串在整个字符串中的位置默认0
- end():获得分组字符串在整个字符串中的结束位置,默认为0
- span返回位置
- search(str,a,b):从a位置到b位置进匹配
- findall:查找所有
- finditer:返回一个结果
- sub:对文本进行更改sub(表达式,替换目标,源文件)
- 中文表示范围是[u4e00-u9fa5]
案例:
import re
title = u'世界 你好,hello world'
p = re.compile(r'[\u4e00-\u9fa5]+')
rst = p.findall(title)
print(rst)
贪婪模式与非贪婪模式
- 贪婪:尽可能多的匹配,*表示贪婪匹配
- 非贪婪:找到符合条件的最小内容即可?表示非贪婪
xpath
- 在xml文件中查找信息的一套规则,根据xml的元素或者属性进行遍历
- 语法
- nodename:某一节点下所有的子节点
- /:从根节点开始选取
- //:选取节点不考虑位置
- .:选取当前节点
- …:选取当前节点的父亲节点
- @:选取属性
- 谓语节点:
- /bookstore/book[1] 选取属于 bookstore 子元素的第一个 book 元素。
- /bookstore/book[last()] 选取属于 bookstore 子元素的最后一个 book 元素
- /bookstore/book[last()-1] 选取属于 bookstore 子元素的倒数第二个 book 元素
- /bookstore/book[position()❤️] 选取最前面的两个属于 bookstore 元素的子元素的 book 元素。
- //title[@lang] 选取所有拥有名为 lang 的属性的 title 元素。
- //title[@lang=‘eng’] 选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。
- /bookstore/book[price>35.00] 选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00。
- /bookstore/book[price>35.00]/title 选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00。
- | :和
- //book/title | //book/price 选取 book 元素的所有 title 和 price 元素。
- //title | //price 选取文档中的所有 title 和 price 元素。
- /bookstore/book/title | //price 选取属于 bookstore 元素的 book 元素的所有 title 元素,以及文档中所有的 price 元素