常用的正则表达式:

'.'     默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行
'^' 匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r"^a","\nabc\neee",flags=re.MULTILINE)
'$' 匹配字符结尾,或e.search("foo$","bfoo\nsdfsf",flags=re.MULTILINE).group()也可以
'*' 匹配*号前的字符0次或多次,re.findall("ab*","cabb3abcbbac") 匹配a,ab,abb 结果为['abb', 'ab', 'a']
'+' 匹配前一个字符1次或多次,re.findall("ab+","ab+cd+abb+bba") 结果['ab', 'abb']
'?' 匹配前一个字符1次或0次
'{m}' 匹配前一个字符m次
'{n,m}' 匹配前一个字符n到m次,re.findall("ab{1,3}","abb abc abbcbbb") 结果'abb', 'ab', 'abb']
'|' 匹配|左或|右的字符,re.search("abc|ABC","ABCBabcCD").group() 结果'ABC'
'(...)' 分组匹配,re.search("(abc){2}a(123|456)c", "abcabca456c").group() 结果 abcabca456c '\A' 只从字符开头匹配,re.search("\Aabc","alexabc") 是匹配不到的
'\Z' 匹配字符结尾,同$
'\d' 匹配数字0-9
'\D' 匹配非数字
'\w' 匹配[A-Za-z0-9]
'\W' 匹配非[A-Za-z0-9]
's' 匹配空白字符、\t、\n、\r , re.search("\s+","ab\tc1\n3").group() 结果 '\t' '(?P<name>...)' 分组匹配 re.search("(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})","371481199306143242").groupdict() 结果{'province': '3714', 'city': '81', 'birthday': '1993'}

最常用的匹配语法

re.match 从头开始匹配
re.search 匹配包含
re.findall 把所有匹配到的字符放到以列表中的元素返回
re.splitall 以匹配到的字符当做列表分隔符
re.sub 匹配字符并替换

反斜杠的困扰
与大多数编程语言相同,正则表达式里使用"\"作为转义字符,这就可能造成反斜杠困扰。假如你需要匹配文本中的字符"\",那么使用编程语言表示的正则表达式里将需要4个反斜杠"\\\\":前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。Python里的原生字符串很好地解决了这个问题,这个例子中的正则表达式可以使用r"\\"表示。同样,匹配一个数字的"\\d"可以写成r"\d"。有了原生字符串,你再也不用担心是不是漏写了反斜杠,写出来的表达式也更直观。

import re

print(re.match('^Chen',"ChenRonghau123"))#只要有结果,就代表匹配的到,^代表匹配字符开头
print(re.match('Chen',"ChenRonghau123"))#re.match代表从开头开始匹配,不需要用^,所以不能支持只匹配中间的,比如只匹配Rong
print(re.match('Rong',"ChenRonghau123"))
print(re.match('qi',"ChenRonghau123"))#没有匹配到
res=re.match('^Chen',"ChenRonghau123")
print(res.group())#查看匹配结果
res=re.match('^Chen\d',"Chen456Ronghau123")# \代表后边是正则语法,d代表的是一个数字
print(res.group())#查看匹配结果
res=re.match('^Chen\d+',"Chen456Ronghau123")# +号代表一个或多个,'\d'匹配数字0-9
print(res.group())#查看匹配结果
print(re.match('.',"ChenRonghau123"))#默认匹配除\n之外的任意一个字符
print(re.match('.+','ChenRonghau123')) print(re.search('R.+','ChenRonghau123'))#re.serach是从整个文本里搜索
print(re.search('R.+u','ChenRonghau123'))#匹配R到u
print(re.search('b$','ChenRonghau123b'))# 匹配字符结尾
print(re.search('R[a-z]','ChenRonghau123b'))#[a-z]只匹配一个字符
print(re.search('R[a-z]+u','ChenRonghau123b'))#匹配的是Ronghau
print(re.search('R[a-z]+u','ChenRonghauRonghau123b'))#多个Ronghau,只匹配第一个
print(re.search('R[a-z]+u','ChenRonGhauRonghau123b'))#匹配的是后边那个,前边那个大写了,不是正确的
print(re.search('R[a-zA-Z]+u','ChenRonGhauRonghau123b'))#匹配的是RonGhauRonghau
print(re.search('g.+l','112g#efgs345lwe%')) # '+'匹配前一个字符1次或多次,re.findall("ab+","ab+cd+abb+bba") 结果['ab', 'abb']
print(re.search('aal?','aalexaaa'))#'?' 匹配前一个字符1次或0次
print(re.search('aal?','aaexaaa'))
print(re.search('[0-9]{3}','aalx2a2345aa'))#'{m}' 匹配前一个字符m次
print(re.search('[0-9]{1,3}','aalx2a234aa'))#'{n,m}' 匹配前一个字符n到m次,re.findall("ab{1,3}","abb abc abbcbbb") 结果'abb', 'ab', 'abb'] #re.findall 把所有匹配到的字符放到以列表中的元素返回
print(re.findall('[0-9]{1,3}','aalx2a234a98a'))#匹配到所有数字 print(re.search('abc|ABC','ABCabcSD').group())
print(re.findall('abc|ABC','ABCabcSD'))#findall没有.group()方法 print(re.search('abc{2}','alexabccc'))#'|' 匹配|左或|右的字符,re.search("abc|ABC","ABCBabcCD").group() 结果'ABC'
print(re.search('(abc){2}','alexabcabc'))#'(...)' 分组匹配,re.search("(abc){2}a(123|456)c", "abcabca456c").group() 结果 abcabca456c
print(re.search('(abc){2}\|','alexabcabc|'))#匹配两次abc和一次管道符
print(re.search('(abc){2}(\|\|=){2}','alexabcabc||=||=')) print(re.search('\A[0-9]+[a-z]\Z','123a'))
# '\A' 只从字符开头匹配,re.search("\Aabc","alexabc") 是匹配不到的
# '\Z' 匹配字符结尾,同$
print(re.search('\D+','123%\n $a'))#'\D' 匹配非数字
print(re.search('\w+','aAz123%\n $a'))#匹配[A-Za-z0-9]
print(re.search('\W+','aAz123%\n $a'))# '\W' 匹配非[A-Za-z0-9]
print(re.search('\s+','aAz123%\n \r \t$a'))#'s' 匹配空白字符、\t、\n、\r , re.search("\s+","ab\tc1\n3").group() 结果 '\t' # '(?P<name>...)' 分组匹配
print(re.search('(?P<id>[0-9]+)','abcd1234daf23'))
print(re.search('(?P<id>[0-9]+)','abcd1234daf23').group())
print(re.search('(?P<id>[0-9]+)','abcd1234daf23').groupdict())
a=re.search('(?P<id>[0-9]+)(?P<name>[a-zA-Z])','abcd1234daf23').groupdict()
print(a)
print(a['id'])
print(re.search('(?P<id>[0-9]+)(?P<name>[a-zA-Z])','abcd1234daf23').group('name'))
print(re.search("(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})","371481199306143242").groupdict())# 结果{'province': '3714', 'city': '81', 'birthday': '1993'} # re.splitall 以匹配到的字符当做列表分隔符
print(re.split('[0-9]','abc12de3f356gh'))
print(re.split('[0-9]+','abc12de3f356gh')) # re.sub 匹配字符并替换
print(re.sub('[0-9]','*','abc12de3f356gh'))#结果:abc**de*f***gh
print(re.sub('[0-9]','*','abc12de3f356gh',count=2))#结果:abc**de3f356gh '''仅需轻轻知道的几个匹配模式:
re.I(re.IGNORECASE): 忽略大小写(括号内是完整写法,下同)
M(MULTILINE): 多行模式,改变'^'和'$'的行为(有点搞不懂)
S(DOTALL): 点任意匹配模式,改变'.'的行为
'''
print(re.search('[a-z]+','abcxdSA'))#结果:abcxd
print(re.search('[a-z]+','abcxdSA',flags=re.I))#结果:abcxdSA print(re.search('.+','\nabc\nee'))#结果:abc
print(re.search('.+','\nabc\nee',flags=re.S))#结果:\nabc\nee '''
反斜杠的困扰
与大多数编程语言相同,正则表达式里使用"\"作为转义字符,这就可能造成反斜杠困扰。
假如你需要匹配文本中的字符"\",那么使用编程语言表示的正则表达式里将需要4个反斜杠"\\\\":
前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。
Python里的原生字符串很好地解决了这个问题,这个例子中的正则表达式可以使用r"\\"表示。
同样,匹配一个数字的"\\d"可以写成r"\d"。
有了原生字符串,你再也不用担心是不是漏写了反斜杠,写出来的表达式也更直观。
'''
print(re.search(r'\\','abd\\fd\\rfa')) print(re.search('[a-z]+h$','abc\ndef\ngh'))

python_91_正则表达式的更多相关文章

  1. JS正则表达式常用总结

    正则表达式的创建 JS正则表达式的创建有两种方式: new RegExp() 和 直接字面量. //使用RegExp对象创建 var regObj = new RegExp("(^\\s+) ...

  2. Python高手之路【五】python基础之正则表达式

    下图列出了Python支持的正则表达式元字符和语法: 字符点:匹配任意一个字符 import re st = 'python' result = re.findall('p.t',st) print( ...

  3. C# 正则表达式大全

    文章导读 正则表达式的本质是使用一系列特殊字符模式,来表示某一类字符串.正则表达式无疑是处理文本最有力的工具,而.NET提供的Regex类实现了验证正则表达式的方法.Regex 类表示不可变(只读)的 ...

  4. C#基础篇 - 正则表达式入门

    1.基本概念 正则表达式(Regular Expression)就是用事先定义好的一些特定字符(元字符)或普通字符.及这些字符的组合,组成一个“规则字符串”,这个“规则字符串”用来判断我们给定的字符串 ...

  5. JavaScript正则表达式,你真的知道?

    一.前言 粗浅的编写正则表达式,是造成性能瓶颈的主要原因.如下: var reg1 = /(A+A+)+B/; var reg2 = /AA+B/; 上述两个正则表达式,匹配效果是一样的,但是,效率就 ...

  6. Python 正则表达式入门(中级篇)

    Python 正则表达式入门(中级篇) 初级篇链接:http://www.cnblogs.com/chuxiuhong/p/5885073.html 上一篇我们说在这一篇里,我们会介绍子表达式,向前向 ...

  7. 【JS基础】正则表达式

    正则表达式的() [] {}有不同的意思. () 是为了提取匹配的字符串.表达式中有几个()就有几个相应的匹配字符串. (\s*)表示连续空格的字符串. []是定义匹配的字符范围.比如 [a-zA-Z ...

  8. JavaScript 正则表达式语法

    定义 JavaScript定义正则表达式有两种方法. 1.RegExp构造函数 var pattern = new RegExp("[bc]at","i"); ...

  9. [jquery]jquery正则表达式验证(手机号、身份证号、中文名称)

    数字判断方法:isNaN()函数 test()方法 判断字符串中是否匹配到正则表达式内容,返回的是boolean值 ( true / false ) // 验证中文名称 function isChin ...

随机推荐

  1. 数据库路由中间件MyCat - 使用篇(3)下篇

    此文已由作者张镐薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 2. 配置conf/server.xml server.xml几乎保存了所有mycat需要的系统配置信息.其 ...

  2. kettle的使用(ETL,数据仓库技术)

    本周项目上用到了kettle并且需要做任务调度,听老师说用kettle自带的调度不大稳定于是便baidu了下,参照这篇文章完成了通过kitchen的调度,简单说就是通过windows的计划任务来调用. ...

  3. mysql错误之errorcode 1215问题

    1.此类问题出现时我们往往会迫不及待的去百度,但是问题偶尔也不是我们想的那样,比如我本次犯下的错误如下: 上图是我给表添加外键约束的时候的sql.下图是我建的表,问题出哪里了?原来是我的数据库根本没有 ...

  4. Python web前端 11 form 和 ajax

    Python web前端 11 form 和 ajax 一.打开服务器 将handlers.py.httpd.py和libs.py三个文件放入新文件夹中,双击打开httpd.py文件即可 二.ajax ...

  5. 小技巧(updating)

    小技巧 我们要算一个点集中所有点到另一个点集中所有点的一些量的时候,可以建立一个超级源点和超级汇点,从多->多变成单->单 整体二分的时候,操作要可以撤销,才能保证复杂度,每一层到左边区间 ...

  6. Codeforces Round #561 (Div. 2) A. Silent Classroom

    链接:https://codeforces.com/contest/1166/problem/A 题意: There are nn students in the first grade of Nlo ...

  7. Codeforces 1175F(哈希后暴力)

    要点 官解使用的哈希,给每个数一个二维键值,这样每个排列就有唯一的键值,再预求一下所给数列的前缀键值,暴力寻找有多少个答案即可. #include <cstdio> #include &l ...

  8. Codeforces 126B(kmp)

    要点 头尾的最长相同只要一个kmp即可得,于是处理中间部分 扫一遍记录一下前缀的每个位置是否存在一个中间串跟它相同,见代码 如果当前没有,接着用Next数组去一找即可 #include <cst ...

  9. Codeforces 161A(贪心)

    要点 我在想贪心是对的那要二分图何用,自己的想法是:二分图最开始并不知道怎么匹配最好所以就按输入顺序连了,之后慢慢修改:而这道匹配也成对匹配但从一开始你就可以知道选哪个最划算,就是贪心地选最小的.不必 ...

  10. php时间戳存在8小时误差

    当将PHP时间戳转化为正常的时间格式一般的操作方法如下: $mytime=time(); echo $mytime.'<br />'; echo date('Y-m-d H:i:s',$m ...