前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RE(正则)和Xpath

RE(正则)和Xpath

作者头像
曼路
发布2019-05-26 10:03:52
1.3K0
发布2019-05-26 10:03:52
举报
文章被收录于专栏:浪淘沙浪淘沙

正则表达式

re匹配中文:[u4e00-u9fa5]

  • 是一个计算机科学的概念
  • 用于使用单个字符串来描述,匹配符合某个规则的字符串
  • 常常用来检索,替换某些模式的文本

正则的语法

  • .(点号)表示任意一个字符,除了\n,比如查找所有的一个字符.
  • []:匹配括号中列举的任意字符,比如[L,Y,0]
  • \d:任意一个数字
  • \D:除了数字都可以
  • \s:表示空格、tab键
  • \S:除了空白符号
  • \w:单词字符、就是a-z,A-Z,0-9
  • \W:除了字符
  • *:前面的内容0次或多次
  • +:至少一次
  • ?:0次或1次
  • {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: 只匹配字符串开头
  • \Z: 仅匹配字符串末尾
  • |: 左右任意一个
  • (?P<name>…): 分组,除了原来的编号再制定一个别名
  • (?P=name): 引用分组

RE 使用步骤

  • 使用compile将表示正则的字符串编译成一个pattern对象
  • 通过pattern对象提供一系列方法付文本进行查找匹配,获得匹配结果,一个match对象
  • 最后使用Match对象提供的属性和方法获得信息,根据需要进行操作

RE 常用函数

  • group() 获得一个或者多个分组匹配的字符串,当获得整个匹配的子串时,直接使用group 或者 grop(0)
  • start:获取分组匹配的子串在整个字符串的起始位置 参数默认为0
  • end: 获取分组匹配的子串在整个字符串的结束位置 默认为0
  • span 返回的结构技术 (start(group),end(group))
import re
p = re.compile(r'\d+')
## 3,10 表示查找的范围
m = p.match("qwq1233qewsfsfrrgrsc",3,10)
print(m)
## match 可以输入参数;查到的结果只包含一个  表示第一次匹配成功的内容
-------------------------------------------------------------
结果:<_sre.SRE_Match object; span=(3, 7), match='1233'>
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
import re
# I表示忽略大小写
p = re.compile(r'([a-z]+) ([a-z]+)',re.I)
m = p.match('I am really love you')
print(m)
-----------------------------------------------------------------
结果:<_sre.SRE_Match object; span=(0, 4), match='I am'>

查找

  • search(str,[,pos[,endpos]]):在字符串中查找匹配,pos和endpos表示起始位置
  • findall:查找所有
  • finditer: 查找 返回一个iter结果
import re
p = re.compile(r'\d+')
m = p.findall("one1two2three34")   
a = p.search("one1two2three34")
print(a)
print(m)
---------------------------------------------------------------------------
结果:<_sre.SRE_Match object; span=(3, 4), match='1'>
 	 ['1', '2', '34']
+++++++++++++++++++++++++++++++++++++++++++++++++++++
#替换
import re
p = re.compile(r'(\w+) (\w+)')
s = "hello 123 wang 123 xiao 456 jing, i love you"
rst = p.sub(r'hello world',s)
print(rst)
---------------------------------------
结果:hello world hello world hello world jing, hello world you

贪婪模式 *

非贪婪 ?

import re
title = '<div>name</div><div>age</div>'
p1 = re.compile(r"<div>.*</div>")
p2 = re.compile(r'<div>.*?</div>')

r1 = p1.match(title)
r2 = p2.search(title)
print(r1.group())
print(r2.group())
-----------------------------------------
结果:<div>name</div><div>age</div>
	 <div>name</div>

匹配中文

  • 大部分中文的表示范围[u4e00-u9fa5] , 不包括全角标点
import re

title = u'世界你好 hello moto'
p = re.compile(r'[\u4e00-\u9fa5]+')
rst = p.findall(title)
print(rst)
-----------------------------
结果:['世界你好']

XPATH

  • 在xml文件中查找信息的一套规则/语言 根据xml元素
  • 开源的

xpath开发工具

  • chrome: xpath helper
  • xmlQuire
  • FIrefox : Xpath Checker

选取节点

  • nodename: 选取此节点的所有子节点
  • /: 从根节点开始选取
  • //: 选取节点,不考虑位置
  • . :选取当前节点
  • … : 选取当前节点的父亲
  • @: 选取属性 //age[@detail] 或者 //div[@class=‘title’]
  • xpath中查找一般按照路径方法查找
  • /School/Student[1]
  • /School/Student[last()]
  • /School/Student[last()-1]
  • /School/Student[position()❤️] 前两个
  • //Student[@score]
  • //Student[@score=‘99’]
  • //STudent[@score]/Age

xpath的一些操作

  • | : 或者
  • 还有很多+ - * div < >
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年12月27日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 正则表达式
    • 正则的语法
      • RE 使用步骤
        • RE 常用函数
          • 查找
            • 贪婪模式 *
              • 非贪婪 ?
                • 匹配中文
                • XPATH
                  • xpath开发工具
                    • 选取节点
                      • xpath的一些操作
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档