正则表达式

正则表达式,Regular Expression ,缩写为regex regexp、RE等

在编程中,最常打交道的就是字符串,处理最多的就是字符串,

正则表达式是文本处理领域最常用的技术,对字符串按照某种规则检索,或者替换字符串

分类:

BRE :基本的正则表达式,grep、sed、vi等软件支持,vim有扩展

ERE : 扩展的正则表达式,egrep(rgrep-E),sed-r等

PCRE : (Perl Compatible Regular Expressions),几乎所有语言都是PCRE的方言或变种,Python从1.6开始使用SRE正则表达式引擎,可以理解为PCRE的子集,见模块re。

基本语法

元字符 metacharacter

.点,匹配除换行符外的任意一个字符,在Windows下回车换行是两个 ,有时正则表达式会留下一个回车,处理时要注意

[abc] 匹配一个字符,包含在集合中的任意一个字符,[abc]匹配plain中的a

[^abc]除abc外的一个字符,只匹配一个,匹配plain中的'p','l','i','n'

[a-z] 字符范围,也是一个集合,只匹配一个字符

[^a-z] 字符范围,也是一个集合,只匹配一个字符,除其中的字符

 匹配单词的边界,b表示在文本找到b开头的单词,b为以b结尾的

B 匹配不是字符的边界的字符,

d 匹配[0-9]中的一位

D 匹配一位非数字

s 匹配一位空字符

S 匹配一位非空白字符

w 匹配[a-zA-Z0-9_],包括中文的字,不匹配符号,支持uncode字符,匹配时注意行尾的回车换行,

W 一位非文字

\, , 原意,加转义符来表达原意

多位匹配贪婪模式,匹配找到的最长的字符

* 多次匹配,零或者以上任意次 ,使用.*是注意范围,模式会影响找到的内容,单行模式有可能找到的并不是你要的,

+ 至少一个,{1,}

? 有无{0,1}

{n} 固定重复次数

{n,}  重复n次及以上

{0,} 相当于*,{1,}相当于+

{n,m} {0,1} n要小于m

x|y 匹配 x或者y 注意w|food 和(w|f)ood 的区别,前者会找到w,food

() 分组,或者捕获,使用捕获后会自动分配组号,从1开始,可以改变优先级,匹配带来分组,没有匹配到就不会有分组

(very)s+1 引用分组号1, s+表示中间空白字符一个以上

(?:w|f)ood 表示括号改变优先级,不分组

((?:w|f)ood) 表示分组组名food,wood

(?:<name>exp) python中使用(?P<head>w|f)ood 命名分组

零宽断言

断言不是分组

f(?=ood) (?:=)断言只是条件,不参与匹配,匹配f,ood是条件

(?<=f)ood 匹配ood,f只是条件

负向零宽断言

(?!) 断言f(?!ood)f后一定不是ood,

(?<!)

(?#commend) 注释,少用。写在表达式前后

分组和捕获意思相同

使用时,能用简单就不用复杂

贪婪和非贪婪,

捕获的内容或匹配的内容不同

(.*?) 找到的内容,非贪婪

*? 匹配任意次,尽可能少

??

+?

{2,}? 相当于{2}

?? 和*? 单独使用没有意义,找啥?

加在重复的选项上

引擎的选项

ignoreCase 忽略大小写

Singleline

Mulitline

单行模式可以突破换行符,控制的是换行符,控制的是点能否匹配到换行符

. 点可以匹配包括换行符的字符

^ $ 表示整个字符串的开头和结尾

多行模式

. 匹配除换行符外的所有字符

^$ 控制行首行尾,多行匹配行首尾

结尾注意 加 ?,win下有问题

socket 库,筛选ip地址

从分组组名中提取数据

分隔符取反

你想要的数据中(最不可能出现的值可以作为你取反的值)来求你要的值


取1-999的数字
[1-9]d|[1-9]d|d
[1-9]?dd?
(?!0)d{1,3}

25[0-5]|2[0-4]2[0-4]|1d{0,2}|0

原文地址:https://www.cnblogs.com/rprp789/p/9608091.html