re模块

re模块

一、正则表达式中常用的字符

1.11个元字符

①.匹配任意字符,‘\n’除外

 

1 import re
2 print(re.findall(a.c,abcjkhkjfagc))

 

[abc,agc]

②*匹配前一个字符0次或多次

1 import re
2 print(re.findall(ab*,abbbdsdsdabbja))
[abbb,abb,a]

③+匹配前一个字符至少一次或者多次

1 import re
2 print(re.findall(ab+,abb]

发现了没有,一样的例子用+匹配到的结果比用*匹配到的结果少了一个,因为+要求前一个字符至少匹配一次,所以你会发现在使用+匹配的时候那个‘a’是匹配不上的

④?匹配前一个字符0次或者一次

import re
print(re.findall(ab?,abbbdsdsdabbja))
[ab,ab,a]

⑤^匹配字符串开头。在多行模式中匹配每一行的开头

1 import re
2 print(re.findall(^ab,abbbdsdsdabbja))
[ab]

⑥匹配字符串末尾,在多行模式中匹配每一行的末尾

1 import re
2 print(re.findall(ab$,abbbdsdsdabbjab))
[ab]

⑦或。匹配|左右表达式任意一个,从左到右匹配,如果|没有包括在()中,则它的范围是整个正则表达式

1 import re
2 print(re.findall(ab|bj,abbbdsdsdabbjab))
[ab,bj,ab]

⑧{m}匹配前一个字符m次,{m,n}匹配前一个字符m至n次,若省略n,则匹配m至无限次

1 import re
2 print(re.findall(ab{0},abbbbbbbbbbbbdas))
3 print(re.findall(ab{5},abbbbbbbbbbbbdas))
4 print(re.findall(ab{0,2},abbbbbbbbbbbbdas))
5 print(re.findall(ab{2,3},abbbbbbbbbbbbdas))
6 print(re.findall(ab{2,},abbbbbbbbbbbbdas))
[a,a]
[abbbbb]
[abb,a]
[abbb]
[abbbbbbbbbbbb]

⑨被括起来的表达式将作为分组,从表达式左边开始没遇到一个分组的左括号“(”,编号+1.
分组表达式作为一个整体,可以后接数量词。表达式中的|仅在该组中有效。

1 import re
2 print(re.findall(ab(ghj|c),abghjdjsadkajsdabc))
[ghj,c]

⑩转义字符,使后一个字符改变原来的意思

  • 反斜杠后边跟元字符去除特殊功能;(即将特殊字符转义成普通字符)
  • 反斜杠后边跟普通字符实现特殊功能;(即预定义字符)
  • 引用序号对应的字组所匹配的字符串。

十一:[]字符集。对应的位置可以是字符集中任意字符。字符集中的字符可以逐个列出,也可以给出范围,如[abc]或[a-c]。[^abc]表示取反,即非abc。

所有特殊字符在字符集中都失去其原有的特殊含义。用\反斜杠转义恢复特殊字符的特殊含义。

 

 

1 import re
2 print(re.findall(a[a-g]{2},abghjdjsadkajsdabc))

 

[abg,abc]
1 import re
2 print(re.findall(a[^a-g]{2},a546bghjdjsadkajsdabc))
[a54,ajs]
import re
print(re.findall([\(\)],a546bghjda(5+2)dkajsdabc))
[(,)]

2、预定义字符集

 

\d
数字:[0-9]
a\bc
a1c
\D
非数字:[^\d]
a\Dc
abc
\s
匹配任何空白字符:[<空格>\t\r\n\f\v]
a\sc
a c
\S 非空白字符:[^\s]
a\Sc
abc
\w
匹配包括下划线在内的任何字字符:[A-Za-z0-9_]
a\wc
abc
\W
匹配非字母字符,即匹配特殊字符
a\Wc
a c
\A
仅匹配字符串开头,同^ \Aabc
abc
\Z
仅匹配字符串结尾,同$
abc\Z
abc
\b
匹配\w和\W之间,即匹配单词边界匹配一个单词边界,也就是指单词和空格间的位置。例如, ‘er\b‘ 可以匹配"never" 中的 ‘er‘,但不能匹配 "verb" 中的 ‘er‘。 \babc\b
a\b!bc
空格abc空格
a!bc
\B
[^\b]

 

****使用正则表达式提取表达式2+5*98+(1+(2*5))最里面的括号里面的值

1 import re
2 print(re.findall(\([^()]*\),2+5*98+(1+(2*5))))
[(2*5)]

 3.特殊的分组用法

(?P<name>)
分组,除了原有的编号外再指定一个额外的别名 (?P<id>abc){2}
abcabc
(?P=name)
引用别名为<name>的分组匹配到字符串 (?P<id>\d)abc(?P=id)
1abc1
5abc5
\<number>
引用编号为<number>的分组匹配到字符串 (\d)abc\1
1abc1
5abc5

二、正则表达式中常用功能函数

 

1、compile()

 

编译正则表达式模式,返回一个对象的模式。(可以把那些常用的正则表达式编译成正则表达式对象,这样可以提高一点效率。)

 

格式:

 

re.compile(pattern,flags=0)

 

pattern: 编译时用的表达式字符串。

 

flags 编译标志位,用于修改正则表达式的匹配方式,如:是否区分大小写,多行匹配等。常用的flags有:

标志
含义
re.S(DOTALL)
使.匹配包括换行在内的所有字符
re.I(IGNORECASE)
使匹配对大小写不敏感
re.L(LOCALE)
做本地化识别(locale-aware)匹配,法语等

分享图片

re.M(MULTILINE)
多行匹配,影响^和$
re.X(VERBOSE)
该标志通过给予更灵活的格式以便将正则表达式写得更易于理解
re.U
根据Unicode字符集解析字符,这个标志影响\w,\W,\b,\B

复制代码

import re tt = "Tina is a good girl,she is cool,clever,and so on..." rr = re.compile(r\w*oo\w*) print(rr.findall(tt)) #查找所有包含‘oo‘的单词 执行结果如下: [good‘,cool‘]

复制代码

2、match()

决定RE是否在字符串刚开始的位置匹配。//注:这个方法并不是完全匹配。当pattern结束时若string还有剩余字符,仍然视为成功。想要完全匹配,可以在表达式末尾加上边界匹配符‘$‘

格式:

re.match(pattern,string,flags=0)

print(re.match(com‘,comwww.runcomoob).group()) print(re.match(com‘,Comwww.runcomoob,re.I).group()) 执行结果如下: com com

3、search()

 格式:

re.search(pattern,flags=0)

re.search函数会在字符串内查找模式匹配,只要找到第一个匹配然后返回,如果字符串没有匹配,则返回None。

print(re.search(\dcom‘,www.4comrunoob.5com).group()) 执行结果如下: 4com

*注:match和search一旦匹配成功,就是一个match object对象,而match object对象有以下方法:

  • group() 返回被 RE 匹配的字符串
  • start() 返回匹配开始的位置
  • end() 返回匹配结束的位置
  • span() 返回一个元组包含匹配 (开始,结束) 的位置
  • group() 返回re整体匹配的字符串,可以一次输入多个组号,对应组号匹配的字符串。

a. group()返回re整体匹配的字符串,
b. group (n,m) 返回组号为n,m所匹配的字符串,如果组号不存在,则返回indexError异常
c.groups()groups() 方法返回一个包含正则表达式中所有小组字符串的元组,从 1 到所含的小组号,通常groups()不需要参数,返回一个元组,元组中的元就是正则表达式中定义的组。 

复制代码

import re a = "123abc456" print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(0)) #123abc456,返回整体 print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(1)) #123 print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(2)) #abc print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(3)) #456
###group(1) 列出第一个括号匹配部分,group(2) 列出第二个括号匹配部分,group(3) 列出第三个括号匹配部分。###

复制代码

4、findall()

re.findall遍历匹配,可以获取字符串中所有匹配的字符串,返回一个列表。

 格式:

re.findall(pattern,flags=0)

p = re.compile(r\d+) print(p.findall(o1n2m3k4)) 执行结果如下: [1‘,2‘,3‘,4‘]

复制代码

import re tt = "Tina is a good girl,and so on..." rr = re.compile(r\w*oo\w*) print(rr.findall(tt)) print(re.findall(r(\w)*oo(\w)‘,tt))#()表示子表达式 执行结果如下: [good‘,cool] [(g‘,d‘),(c‘,l‘)]

复制代码

5、finditer()

 搜索string,返回一个顺序访问每一个匹配结果(Match对象)的迭代器。找到 RE 匹配的所有子串,并把它们作为一个迭代器返回。

格式:

re.finditer(pattern,flags=0)

复制代码

iter = re.finditer(r\d+‘,12 drumm44ers drumming,11 ... 10 ...) for i in iter: print(i) print(i.group()) print(i.span()) 执行结果如下: <_sre.SRE_Match object; span=(0,2),match=12‘> 12 (0,2) <_sre.SRE_Match object; span=(8,10),match=44‘> 44 (8,10) <_sre.SRE_Match object; span=(24,26),match=11‘> 11 (24,26) <_sre.SRE_Match object; span=(31,33),match=10‘> 10 (31,33)

复制代码

6、split()

按照能够匹配的子串将string分割后返回列表。

可以使用re.split来分割字符串,如:re.split(r‘\s+‘,text);将字符串按空格分割成一个单词列表。

格式:

re.split(pattern,string[,maxsplit])

maxsplit用于指定最大分割次数,不指定将全部分割。

print(re.split(\d+‘,one1two2three3four4five5)) 执行结果如下: [one‘,two‘,three‘,four‘,five‘,‘‘]

7、sub()

使用re替换string中每一个匹配的子串后返回替换后的字符串。

格式:

re.sub(pattern,repl,count)

复制代码

import re text = "JGood is a handsome boy,he is cool,and so on..." print(re.sub(r\s+‘,-,text)) 执行结果如下: JGood-is-a-handsome-boy,-he-is-cool,-clever,-and-so-on...

其中第二个函数是替换后的字符串;本例中为‘-‘

第四个参数指替换个数。默认为0,表示每个匹配项都替换。

复制代码

re.sub还允许使用函数对匹配项的替换进行复杂的处理。

如:re.sub(r‘\s‘,lambda m: ‘[‘ + m.group(0) + ‘]‘,text,0);将字符串中的空格‘ ‘替换为‘[ ]‘。

import re text = "JGood is a handsome boy,lambda m:[‘+m.group(0)+],0)) 执行结果如下: JGood[ ]is[ ]a[ ]handsome[ ]boy,[ ]he[ ]is[ ]cool,[ ]clever,[ ]and[ ]so[ ]on...

8、subn()

 返回替换次数

格式:

subn(pattern,count=0,flags=0)

复制代码

print(re.subn([1-2]‘,A‘,123456abcdef)) print(re.sub("g.t","have",I get A,I got B,I gut C)) print(re.subn("g.t",I gut C)) 执行结果如下: (AA3456abcdef‘,2) I have A,I have B,I have C (I have A,I have C‘,3)

复制代码

三、小实践

 

1、匹配电话号码

 

p = re.compile(r\d{3}-\d{6}) print(p.findall(010-628888‘))

 

2、匹配IP

 

re.search(r"(([01]?\d?\d|2[0-4]\d|25[0-5])\.){3}([01]?\d?\d|2[0-4]\d|25[0-5]\.)","192.168.1.1")

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


jquery.validate使用攻略(表单校验) 目录 jquery.validate使用攻略1 第一章&#160;jquery.validate使用攻略1 第二章&#160;jQuery.validate.js API7 Custom selectors7 Utilities8 Validato
/\s+/g和/\s/g的区别 正则表达式/\s+/g和/\s/g,目的均是找出目标字符串中的所有空白字符,但两者到底有什么区别呢? 我们先来看下面一个例子: let name = &#39;ye wen jun&#39;;let ans = name.replace(/\s/g, &#39;&#3
自整理几个jquery.Validate验证正则: 1. 只能输入数字和字母 /^[0-9a-zA-Z]*$/g jQuery.validator.addMethod(&quot;letters&quot;, function (value, element) { return this.optio
this.optional(element)的用法 this.optional(element)是jquery.validator.js表单验证框架中的一个函数,用于表单控件的值不为空时才触发验证。 简单来说,就是当表单控件值为空的时候不会进行表单校验,此函数会返回true,表示校验通过,当表单控件
jQuery.validate 表单动态验证 实际上jQuery.validate提供了动态校验的方法。而动态拼JSON串的方式是不支持动态校验的。牺牲jQuery.validate的性能优化可以实现(jQuery.validate的性能优化见图1.2 jQuery.validate源码 )。 也可
自定义验证之这能输入数字(包括小数 负数 ) &lt;script type=&quot;text/javascript&quot;&gt; function onlyNumber(obj){ //得到第一个字符是否为负号 var t = obj.value.charAt(0); //先把非数字的都
// 引入了外部的验证规则 import { validateAccountNumber } from &quot;@/utils/validate&quot;; validator.js /*是否合法IP地址*/ export function validateIP(rule, value,cal
VUE开发--表单验证(六十三) 一、常用验证方式 vue 中表单字段验证的写法和方式有多种,常用的验证方式有3种: data 中验证 表单内容: &lt;!-- 表单 --&gt; &lt;el-form ref=&quot;rulesForm&quot; :rules=&quot;formRul
正则表达式 座机的: 例子: 座机有效写法: 0316-8418331 (010)-67433539 (010)67433539 010-67433539 (0316)-8418331 (0316)8418331 正则表达式写法 0\d{2,3}-\d{7,8}|\(?0\d{2,3}[)-]?\d
var reg = /^0\.[1-9]{0,2}$/;var linka = 0.1;console.log (reg.test (linka)); 0到1两位小数正则 ^(0\.(0[1-9]|[1-9]{1,2}|[1-9]0)$)|^1$ 不含0、0.0、0.00 // 验证是否是[1-10
input最大长度限制问题 &lt;input type=&quot;text&quot; maxlength=&quot;5&quot; /&gt; //可以 &lt;input type=&quot;number&quot; maxlength=&quot;5&quot; /&gt; //没有效
js输入验证是否为空、是否为null、是否都是空格 目录 1.截头去尾 trim 2.截头去尾 会去掉开始和结束的空格,类似于trim 3.会去掉所有的空格,包括开始,结束,中间 1.截头去尾 trim str=str.trim(); // 强烈推荐 最常用、最实用 or $.trim(str);
正则表达式语法大全 字符串.match(正则):返回符合的字符串,若不满足返回null 字符串.search(正则):返回搜索到的位置,若非一个字符,则返回第一个字母的下标,若不匹配则返回-1 字符串.replace(正则,新的字符串):找到符合正则的内容并替换 正则.test(字符串):在字符串中
正整数正则表达式正数的正则表达式(包括0,小数保留两位): ^((0{1}.\d{1,2})|([1-9]\d.{1}\d{1,2})|([1-9]+\d)|0)$正数的正则表达式(不包括0,小数保留两位): ^((0{1}.\d{1,2})|([1-9]\d.{1}\d{1,2})|([1-9]+
JS 正则验证 test() /*用途:检查输入手机号码是否正确输入:s:字符串返回:如果通过验证返回true,否则返回false /function checkMobile(s){var regu =/[1][3][0-9]{9}$/;var re = new RegExp(regu);if (r
请输入保留两位小数的销售价的正则: /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/ 1.只能输入英文 &lt;input type=&quot;text&quot; onkeyup=&quot;value
判断价格的正则表达式 价格的正则表达式 /(^[1-9]\d*(\.\d{1,2})?$)|(^0(\.\d{1,2})?$)/; 1 解析:价格符合两种格式 ^ [1-9]\d*(.\d{1,2})?$ : 1-9 开头,后跟是 0-9,可以跟小数点,但小数点后要带上 1-2 位小数,类似 2,2
文章浏览阅读106次。这篇文章主要介绍了最实用的正则表达式整理,比如校验邮箱的正则,号码相关,数字相关等等,本文给大家列举的比较多,需要的朋友可以参考下。_/^(?:[1-9]d*)$/ 手机号
文章浏览阅读1.2k次。4、匹配中的==、an==、== an9、i9 == "9i"和99p==请注意下面这部分的作用,它在匹配中间内容的时候排除了说明:当html字符串如下时,可以匹配到两处,表示匹配的字符串不包含and且不包含空白字符。说明:在上面的正则表达式中,_gvim正则表达式匹配不包含某个字符串
文章浏览阅读897次。【代码】正则表达式匹配a标签的href。_auto.js 正则匹配herf