正则表达式
正则表达式,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下回车换行是两个rn,有时正则表达式会留下一个回车,处理时要注意 [abc] 匹配一个字符,包含在集合中的任意一个字符,[abc]匹配plain中的a [^abc]除abc外的一个字符,只匹配一个,匹配plain中的‘p‘,‘l‘,‘i‘,‘n‘ [a-z] 字符范围,也是一个集合,只匹配一个字符 [^a-z] 字符范围,也是一个集合,只匹配一个字符,除其中的字符 b 匹配单词的边界,bb表示在文本找到b开头的单词,bb为以b结尾的 B 匹配不是字符的边界的字符, d 匹配[0-9]中的一位 D 匹配一位非数字 s 匹配一位空字符 S 匹配一位非空白字符 w 匹配[a-zA-Z0-9_],包括中文的字,不匹配符号,支持uncode字符,匹配时注意行尾的回车换行, W 一位非文字 ,n,r 原意,加转义符来表达原意 多位匹配贪婪模式,匹配找到的最长的字符 * 多次匹配,零或者以上任意次 ,使用.*是注意范围,模式会影响找到的内容,单行模式有可能找到的并不是你要的, + 至少一个,{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 ? 单行模式可以突破换行符,控制的是换行符,控制的是点能否匹配到换行符 . 点可以匹配包括换行符的字符 ^ $ 表示整个字符串的开头和结尾 ? 多行模式 . 匹配除换行符外的所有字符 ^$ 控制行首行尾,多行匹配行首尾 结尾注意nr 加r?,win下有问题 ? socket 库,筛选ip地址 从分组组名中提取数据 分隔符取反 你想要的数据中(最不可能出现的值可以作为你取反的值)来求你要的值 ? ?
25[0-5]|2[0-4]2[0-4]|1d{0,2}|0 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |