博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[python] 正则表达式细节
阅读量:7059 次
发布时间:2019-06-28

本文共 900 字,大约阅读时间需要 3 分钟。

1、零宽断言

所谓零宽断言就是并不去真正的匹配字符串文本,而仅仅是匹配对应的位置。

正则表达式中有很多这样的断言,常见的如匹配字符串或者行的起始位置 ^ 和 /A,匹配字符串或者行的末尾 $ 和 /Z,单词边界/B等等。这些简单的就不说了,今天主要说一下界定的使用方法。

表达式结构:

(?=exp) 匹配exp前面的位置,即某表达式后面是exp
(?<=exp) 匹配exp后面的位置,即某表达式前面是exp
(?!exp)  匹配后面跟的不是exp的位置,即某表达式后面不是exp
(?<!exp)  匹配前面不是exp的位置,即某表达式前面不是exp

 

 

 

 

 

 

(?<=<(\w+)>).*(?=<\/\1>) 匹配不包含属性的简单HTML标签内里的内容。

在Python3.7下测试:

import restr = "(?<=<(\w+)>).*(?=(<\/\1>))"re = re.compile(str)

error: look-behind requires fixed-width pattern

 

错误说明:前向界定括号中的表达式必须是常值,也就是不可以在前向界定的括号里写正则式。

建议:安装 regex 模块替代原有的 re,regex修正了re不少的bug,只要 import regex as re 就跟内置的re用法一样了

 

2、反斜杠的问题

与大多数编程语言相同,正则表达式里使用"\"作为转义字符,这就可能造成反斜杠困扰。

假如你需要匹配文本中的字符"\",那么使用编程语言表示的正则表达式里将需要4个反斜杠"\\\\":

第一个和第三个用于在编程语言里将第二个和第四个转义成反斜杠,

转换成两个反斜杠\\后再在正则表达式里转义成一个反斜杠用来匹配反斜杠\。

这样显然是非常麻烦的。

Python里的原生字符串很好地解决了这个问题,这个例子中的正则表达式可以使用r"\\"表示。

同样,匹配一个数字的"\\d"可以写成r"\d"。

有了原生字符串,妈妈再也不用担心我的反斜杠问题~

 

转载于:https://www.cnblogs.com/P3nguin/p/7521215.html

你可能感兴趣的文章
filter函数用法
查看>>
星期天去首都图书馆转了转
查看>>
Android <Android应用开发实战> 资源类型<一>
查看>>
[Git] Git把Tag推送到远程仓库
查看>>
[Android Pro] http://blog.csdn.net/wuyinlei/article/category/5773375
查看>>
[Linux] Systemd 入门教程:命令篇
查看>>
[Web 前端 ] 五大WEB主流浏览器及四大内核
查看>>
如果仔细观察他们,你会发现他们时时都在锻炼
查看>>
mysql命令自动补全
查看>>
设计模式之简单工厂模式
查看>>
CSDN学院 免费技术答疑公开课,本周六场即将开播~~~
查看>>
计算机组成原理——主存与cache的映射关系
查看>>
让DIV垂直居中的几种办法
查看>>
透视投影的坐标转换与数学推导
查看>>
《我们应当怎样做需求分析》读书笔记
查看>>
JpetStore目录文件关系分析
查看>>
《高性能javascript》学习总结
查看>>
sql ROW_NUMBER() 排序函数
查看>>
用忠诚、时间、奉献来换取一家公司的地位、头衔,以及待遇
查看>>
Sonar Qube QA
查看>>