day26 re正则表达式

 Python之路,Day14 = Python基础14

  1 compile()
  2 match()
  3 search()
  4 findall()
  5
  6 m.group()  # 括号里面剋跟参数,表示打印里面(分组)的第几个元素(索引从1开始)   需要测试下
  7
  8
  9 a = re.compile(r‘abc‘)     # 制作匹配规则
 10 a.search(‘abcdefghijk‘)    # a是一个对象
 11
 12 match   # 从第一个开始匹配
 13 findall  # 找出所有符合规则的
 14 search  # 从前往后开始寻找
 15
 16       元字符
 17 .       # 除换行符的任意字符
 18 \       # 转义字符
 19       # re 模块是 python 调用的一个 小型语言,如果 规则里面有 \\ 的话,
 20       # python 解释器在读取的时候,就会先把它转成 \ 去掉特殊意义,
 21       # 但是 re 里面还是需要转化 \ 的特殊意义,所以,需要 \\\\ 来使用
 22       # 经过 python 的时候,变成了 \\, 到 re 里面,就变成了 \;
 23 [...]   # 字符集合
 24
 25 \d      # 数字[0-9]
 26 \D      # 非数字[^0-9]
 27 \s      # 空白字符[<空格>\t\r\n\f\n]
 28 \S      # 非空白字符[^\s]
 29 \w      # 单字字符[A-Za-z0-9]
 30 \W      # 非单词字符[^\w]
 31
 32        数量词字符
 33 *       # 匹配前0个字符1次或者多次
 34 +       # 匹配前一个字符1次或者多次
 35 ?       # 匹配前一个字符0次或者1次
 36 {m}     # 匹配前一个字符m次
 37 {m,n}   # 匹配前一个字符m至n次
 38 数量词?# 变成非贪婪模式(默认为贪婪模式,尽可能的匹配多的次数)
 39
 40 ^
 41 ‘^[abc]‘        # 以a或b或c开头的
 42 ‘[^abc]‘        # 非a、b、c
 43
 44
 45         边界字符
 46 ^       # 匹配字符串开头,多行匹配每一行开头
 47     ‘^[abc]‘        # 以a或b或c开头的
 48     ‘[^abc]‘        # 非a、b、c
 49
 50 $       # 匹配字符串末尾,多行匹配每一行末尾
 51 \A      # 仅匹配字符串开头,注意转义字符
 52 \Z      # 仅匹配字符串末尾,注意转义字符
 53 \b      # 匹配\w和\W之间,注意转义字符
 54
 55
 56         逻辑、分组
 57 |       # 或
 58     ret = findall("www\.(?:\w+)\.(?:com|cn)")
 59             # findall  默认只显示 分组的信息(括号里面的), 加了 ?: 那么就取消优先级啊(打印所有)
 60             #  |  两个要用 括号 括起来
 61
 62 (...)   # 匿名分组
 63         a = re.compile(‘(a)b(c)‘)
 64         a.match(‘abcdefg‘)
 65         a.groups()      # 分组匹配。会打印出一个元组,符合规则a的为第一个元素,符合规则c的为第二个元素,如果后面的规则也有括号的话,依次变为元素
 66
 67
 68 (?P<name>...)       # 除了分组外还替该组制定一个 name 的别名
 69         p = re.compile(‘(?P<name>a)b(c)‘)
 70         a = p.match(‘abcdef‘)
 71         a.group(‘name‘)   # 可以把这个对应的元素取出来
 72         a.groups()
 73         a.groupdict()
 74
 75
 76 \<number>           # 引入编号为<number>的分组匹配到的字符串
 77         p = re.compile(r‘(?<name>a)b(c)\1‘)    # 注意 1 前面的 \ ,不加 r ,会被当成转义字符,可以写两个 \
 78         # \1 像当与在这个位置引用了前面第一个的那个规则(分组里面的第一个),同样,不会被写入到分组中
 79         p.match(‘abcdef‘)
 80         a.groups()
 81         a.groupdict()
 82
 83
 84 (?P=name)           # 引用别名为<name>的分组匹配到的字符串
 85         p = re.compile(‘(?<name>a)b(c)(?P=name)‘)
 86         # (?P=name) 相当于在这个位置引用了前面那个 名字叫 name 的这个规则,虽然这里有括号,但是它只会匹配到,不会放入分组中
 87         p.match(‘abcdef‘)
 88         a.groups()
 89         a.groupdict()
 90
 91
 92
 93         特殊构造
 94 (?:...)         # (...) 不分组版本,虽然在括号里面,但是不进行分组
 95 (?#...)         # #号后面的内容将作为注释
 96 (?=...)         # 后面的限定词满足 ... 条件
 97         re.compile(r‘a(?=\d)‘)        # 匹配前面是a,后面是数字的内容,得到的结果显示出a,不显示后面的数字
 98 (?!...)         # 后面的限定词不满足 ... 条件
 99 (?<=...)        # 前面的限定词满足 ... 条件
100 (?<!...)        # 前面的限定词不满足 ... 条件
101 (?(id/name) yes |no)        #
102                 # re.compile(r‘(\d)?abc(?(1)\d|abc)‘)
103                     # 匹配规则为  (\d)?abc ,有分组;
104                     # (?(1)\d|abc) 前面 分组里面位置为 1 的规则,可以是数字,也可以是 abcdef
105
106
107             正则表达式开关
108 忽略大小写:
109     可以写成:re.compile(r‘(?i)abc‘)
110     开关模式:re.compile(r‘abc‘, re.I)       # 推荐
111
112
113 sub
114     p = re.compile(r‘(\w) (\w)‘)
115     s = ‘hi you, good boy‘
116     print(p.sub(r‘\2 \1‘, s)
117     >>> you hi, boy good
时间: 2024-10-06 06:21:53

day26 re正则表达式的相关文章

【Linux系列】【基础版】第四章 Shell基础之正则表达式

4. Shell基础之正则表达式     4.1 正则就是一串有规律的字符串         4.1 grep              4.1.1 格式: grep [-cinrvABC] 'word' filename             4.1.2 -c //count,表示行数             4.1.3 -i //不区分大小写             4.1.4 -n  //显示行号             4.1.5 -r  //遍历所有子目录             4

正则表达式中的逆向思维

人们的正常思维都是顺向的,那么逆向思维呢,特别是初学正则表达式的同学们,好不容易掌握了正则表达式的用法,再突然要你用逆向思维做题,会有很多不适应: 这里拿三道题,来做简单介绍: 1.经典例题取IP: [[email protected] ~]# ifconfig eth0|sed -nr '2s#^[^0-9]+(.*)[a-Z]{5,}.*#\1#gp' 10.0.0.200 2.调换/etc/passwd中最后一列和第一列的位置: [[email protected] ~]# head /p

JAVA正则表达式:Pattern类与Matcher类详解(转)

java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表现模式. Matcher 一个Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查. 首先一个Pattern实例订制了一个所用语法与PERL的类似的正则表达式经编译后的模式,然后一个Matcher实例在这个给定的Pattern实例的模式控制下进行字符串的匹配工作

前端学PHP之正则表达式函数

前面的话 正则表达式不能独立使用,它只是一种用来定义字符串的规则模式,必须在相应的正则表达式函数中应用,才能实现对字符串的匹配.查找.替换及分割等操作.前面介绍了正则表达式的基础语法,本文将详细介绍正则表达式函数 匹配与查找 [preg_match()] preg_match()函数用来执行一个正则表达式匹配,搜索subject与pattern给定的正则表达式的一个匹配.返回pattern的匹配次数.它的值将是0次(不匹配)或1次,因为preg_match()在第一次匹配后将会停止搜索.preg

正则表达式

grep命令和正则表达式 一. 正则 : 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑.给定一个正则表达式和另一个字符串,我们可以达到如下的目的:1. 给定的字符串是否符合正则表达式的过滤逻辑(称作"匹配"):2. 可以通过正则表达式,从字符串中获取我们想要的特定部分. 正则表达式和通配符一样,也是一组特殊符号,通配符是由sh

java中的正则表达式

正则表达式 : 正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串.将匹配的子串替换或者从某个串中取出符合某个条件的子串等. 一些字符所代表的意思: \        将下一字符标记为特殊字符.文本.反向引用或八进制转义符^       匹配输入字符串开始的位置$       匹配输入字符串结尾的位置.        匹配任何单个字符\s      空白(空格符.换行符.回车符.制表符)\S     非空白[]  

Python 正则表达式相关问题

这几天学习python,写正则表达式相关代码如下: import re print(re.search(r'(?<=<(\w+)>).*(?=<\/\1>)',"<b>ewuiiriur</b>sdksfkj").span()) 报错如下: raise error("look-behind requires fixed-width pattern")sre_constants.error: look-behind

7.python之正则表达式re模块

一.re模块的常用方法: re.findall() 用于返回一个字符串中,所有能被正则表达式所匹配到的字符串,以列表的方式返回. 用法re.findall(正则表达式,字符串). s1 = "sadjhjafdsajkhjsdaysadsadduayu" 比如说,想要从上面这一长串字符串中,匹配出a后面有一个任一字符在紧接着一个字母u的字符串. print re.findall('a.u',s1) >>>['ayu'] re.finditer()作用和findall一

JS中有关正则表达式的一些常见应用

总所周知,正则表达式主要用于字符串处理.表单验证等,简单的代码量实现复杂的功能 1.身份证号码的一个校验 先做一个简单的位数校验来判断身份证的合法性:(15位数字或18位数字或17位数字加X|x) var reg=/(^\d{15}$)|(^\d{18}$)|(^\d{17}(^\d|X|x)$)/ if(reg.test(num) === false){ alert("你输入的身份证不合法"); return false; } 18位=前六位地区+中八位出生日期+后4位顺序号(最后一