Linux 正则表达式和通配符 以及Python断言

通配符

通配符通常用来匹配文件、目录


*


匹配任意长度的任意字符,可以是0个


?


匹配任意单个字符,必须是1个


[ ]


匹配指定字符范围内的任意单个字符


[a-z,A-Z,0-9]


匹配所有数字字母,可以不加逗号


[a-z]


表示取a..z的所有字符


[A-Z]


表示A,B.....Z


[a-Z]


表示所有大小写字母


[:upper:]


所有大写字母


[:lower:]


所有小写字母


[:alpha:]


所有字母,大小写


[:digit:]


所有数字


[:alnum:]


所有数字和字母


[:space:]


空白字符


[:punct:]


标点符号


[^]


匹配指定字符范围外的任意单个字符  同[!]


[^0-9]


相当于[^[:digit:]]


[^a-z]


所有非a..z的字符


[^A-Z]


所有非A..Z的字符

正则表达式

概述

正则表达式Regular Expression,缩写RE,是文本处理极为重要的技术,用它可以对字符串按照某种规则进行检索、替换。正则表达式应用极其广泛,shell中文本处理命令、各种高级编程语言都支持正则。

分类

1、BRE

基本正则表达式,grep、sed等都支持。

2、ERE

扩展正则表达式,egrep(grep -E)、sed -r等。

3、PCRE

几乎所有高级语言都是PCRE的方言或变种。

元字符metacharacter

代码 说明 举例
Basic

RegEx


Extend

RegEx

Python
. 匹配除换行符以外的任意一个字符 . . . .
[abc] 字符集合,匹配集合中的任意一个字符 [abc]匹配plain中的‘a‘ [abc] [abc] [abc]
[^abc] 字符集合,只能表示一个字符位置。
匹配除去集合内字符的任意一个字符
[^abc]可以匹配plain中的‘p‘,‘l‘,‘i‘,‘n‘ [^abc] [^abc] [^abc]
[a-Z] 自付范围,也是集合,表示一个字符位置
匹配包含的任意一个字符
常用的有[A-Z][0-9] [a-Z] [a-Z] [a-Z]
[^a-Z] 字符范围,也是个集合,表示一个字符位置
匹配去除集合内字符的任意一个字符
  [^a-Z] [^a-Z] [^a-Z]
\b 匹配单词边界 \bb在文本中查找以b开头的字符 \b \b \b
\B 不匹配单词边界 t\B包含t的单词但是不以t结尾的t字符,例如write
\Bb不以b开头但含有b的单词,如able
\B \B \B
\t 匹配一个横向制表符   不支持 不支持  
\v 匹配一个垂直制表符   不支持 不支持  
\s 匹配1位空白字符,包括换行符、制表符、空格
[\f\r\n\t\v],\f表示换页,\v表示垂直制表符
  不支持 不支持  
\S 匹配一位非空白字符   不支持 不支持  
\d 同[0-9],匹配一位数字 \d 不支持 不支持  
\D 同[^0-9],匹配一位非数字   不支持 不支持  
\w 匹配[a-zA-z0-9_],包含中文 \w \w \w \w
\W 匹配\w之外的字符   \W \W \W
\<pattern\> \<词首锚定,\>词尾锚定,这两个和\b相同 \<abc\>匹配单词abc等价\babc\b      

单行模式

. 点号可以匹配所有字符,包括换行符

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

多行模式

.点号可以匹配所有字符,但不包括换行符

^ 表示整个字符串的开头,$表示结尾,开始指的是\n后紧接着下一个字符,结束指的是\n前的字符

重复

代码 说明 举例
* 表示前面正则表达式匹配的内容
会重复0次或多次
e\w*单词中有e,后面是非空白字符
+ 表示前面正则表达式重复至少1次 e\w+单词中e后面至少有一个非空白字符
表示前面的正则表达式会重复0次或1次 e\w?单词e后至多有一个非空白字符
{n} 重复n次  
{n,} 重复至少n次
e\w{1,}等价e\w+

e\w{0,}等价e\w*

e\w{0,1}等价e\w?

{n,m} 重复n到m次 e\w{1,10}单词中e后面至少一个最多10个非空白字符

分组捕获、断言、注释(python)

代码 说明 举例
x|y 匹配x或匹配y w|food 或者 (w|f)ood
捕获    
(pattern)
使用小括号指定一个子表达式,也叫分组

捕获后会自动分配组号,从1开始,可以改变优先级

 
\数字 匹配对应的分组 (very)\1表示匹配 very very,分组是very
(?:pattern) 如果仅仅为了改变优先级,不需要捕获分组
(?:w|f)ood

‘industr(?:y|ies)‘ 等价 ‘industry|industries‘

(?<name>exp)或
(?‘name‘exp)

分组捕获,但是可以通过那么访问分组,

Python语法必须是(?P<name>exp)

 
零宽断言    
(?=exp)
零宽度正预测先行断言

断言exp一定出现在匹配字符的右边

也就是说匹配字符的后面一定有exp

f(?=ood)f后面一定有ood出现
(?<=exp)
零宽度正回顾后发断言

断言exp一定出现在匹配字符的左边

也就是说匹配字符前面一定有exp

(?<=\d{3})o{1,2}p表示匹配oop的字符串前面一定有三个数字
负向零宽断言    
(?!exp)
零宽度负预测先行断言

断言exp一定不会出现在右侧,

也就是说断言后面一定不是exp


\d{3}(?!\d)表示匹配3位数字且三位数字后 一定不是数字

foo(?!d)表示foo的后面一定不是d

(?<!exp)
零宽度负回顾后发断言

断言exp一定不会出现在左侧,

也就是说断言前面一定不是exp


(?<!f)ood表示ood的前面一定不是f

注释    
(?#comment) 注释 f(?=oo)

贪婪与非贪婪

代码 说明
*? 匹配任意次,但尽可能少重复
+? 匹配至少1次,尽可能少重复
?? 匹配0或1次,尽可能少重复
{n,}? 匹配至少n次,尽可能少重复
{n,m}? 匹配至少n次,至多m次,尽量少匹配

原文地址:https://www.cnblogs.com/zh-dream/p/12392911.html

时间: 2024-10-08 13:41:54

Linux 正则表达式和通配符 以及Python断言的相关文章

Linux正则表达式grep与egrep

Linux正则表达式grep与egrep 正则表达式:它是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串.在很多文本编辑器或其他工具里,正则表达式通常被用来检索或替换那些符合某个模式的文本内容.其实正则表达式,只是一种思想,一种表示方法.只要我们使用的工具支持表示这种思想那么这个工具就可以处理正则表达式的字符串.常用的工具有grep, sed, awk,这三个都是针对文本的行才操作的. grep  过滤器语法: grep  [-cinvABC]  'word'  filenam

Linux下常见通配符总结

通配符一般用于用户的命令行bash环境,而linux正则表达式多用于grep/sed/awk场景. * --通配符,代表人意(0到多个)字符 ?--通配符,代表任意1个字符 ; --连续不同命令的分隔符 # --配置文件注释 |--管道符 ~  用户的家目录 -         上一次的目录 $  变量前需要加的符号 /   路径分隔符号 >或1>  重定向,会覆盖源文件 >> 追加重定向,追加 <  输入重定向 << 追加输入重定向 '   单引号,不具有变量置

老男孩带你了解perl正则表达式中的零宽断言

老男孩IT教育小编为大家整理了perl正则表达式中的零宽断言的方法,希望能帮到大家 1.1 前言 本文只介绍perl语言正则表达式的零宽断言功能. 零宽断言实质:匹配文本里面的位置. 零宽断言叫zero-length assertions,也叫lookaround(这个更容易理解). 包括:lookahead(向前看,零宽度正预测先行断言),lookbehind(向后看,零宽度正回顾后发断言). 从左到右对文本进行匹配,判断是否符合exp表达式. 名字 表达式 如果子表达式成功则- positi

Linux 正则表达式 grep

容易混淆的两个注意事项: 1)linux正则表达式一般是以行为单位处理的. 2)正则表达式和我们常用的通配符特殊字符是有本质区别的,例如:ls *.txt 这里的*就是通配符(表示所有),不是正则表达式. 注意字符集问题: 确保字符集:export LC_ALL=C --------------------------------------------- 基础正则表达式+扩展正则表达式含义解释: --------------------------------------------- .  

linux服务器登录邮件告警python程序

linux服务器用户登录邮件告警python小程序,一旦有人登录服务器就发邮件通知系统管理员.作为SA有些服务器只有自己可以登录的,你懂的!可有时候会被研发坑,被运维坑.为了全面掌控服务器,配置一个用户登录系统邮件通知,是很必要滴! 比较渣渣的一个脚本,不过在次基础上可以很容易的扩展滴.直接上代码了. #!/usr/bin/python#coding:utf8import smtplibimport stringimport psutilimport datetime HOST = "smtp.

linux正则表达式的使用

正则表达式的使用 1.1 创建环境 cat >q.txt<<EOF oldboy  oldboy hellooldboy hellooldboy awkoldboy  awkoldboy sedoldboy sedoldboy oldboyedu oldboyedu EOF 取出只有oldboy的行 grep "\boldboy\b" q.txt 实例1-1反向引用 [[email protected]~]# #####第一个里程碑-反向引用(先保护起来,然后使用)

Linux 正则表达式

Linux 正则表达式(*****) 1.什么是正则表达式? 简单的说,正则表达式就是为处理大量的字符串而定义的一套规则和方法 通过定义的这些特殊符号的辅助,系统管理员就可以快速过滤,替换或输出需要的字符串. Linux 正则表达式一般以行为单位处理的. 注意事项: a.#alias grep='grep --color=auto'  ===>以特定颜色高亮显示匹配关键字 b.注意字符集,LC_ALL=C   #export LC_ALL=C 实战举例: 1)^ word  搜索以 word 开

运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程,把获取的信息存入数据库

运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程 有关前两篇的链接: 运用Python语言编写获取Linux基本系统信息(一):获得Linux版本.内核.当前时间 运用Python语言编写获取Linux基本系统信息(二):文件系统使用情况获取 一.实验环境: Python2.7.10.pycharm.VM虚拟机.CentOS6.3.mysql 二.MySQLdb模块: MySQLdb模式是Python中专门连接MySQL数据库的模块,另外Python开发环境的搭

[Shell]正则表达式与通配符

------------------------------------------------------------------------------------- 正则表达式与通配符: 1. 正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配.grep.awk.sed等命令可以支持正则表达式. 2. 通配符用来匹配符合条件的文件名,通配符是完全匹配.ls.find.cp这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配. 基础正则表达式: *    前一个字符