Python re模块(正则表达式)

一、简介

  正则表达式本身是一种小型的、高度专业化的编程语言,而在python中,通过内嵌集成re模块,程序媛们可以直接调用来实现正则匹配。正则表达式模式被编译成一系列的字节码,然后由用C编写的匹配引擎执行。需导入re模块。强烈建议使用Python的“r”前缀,就不用考虑转义的问题。

二、常用的字符含义

1.预定义字符

字符含义举例结果
 \d数字:[0-9]a\dca1c
\D非数字:[^\d]a\Dcabc
\s匹配任何空白字符:[<空格>\t\r\n\f\v]a\sca  c
\S非空白字符:[^\s]a\Scabc
\w匹配包括下划线在内的任何字字符:[A-Za-z0-9_]a\wcabc
\W匹配非字母字符,即匹配特殊字符a\Wca  c
\b匹配\w和\W之间,即匹配一个单词边界,也就是指被匹配的内容的左边(\b在左)或右边(\b在右)不能有字母或数字。例如, '\ber\b' ,匹配"er"的左右旁不能有字母或数字。abc\b

abc%

\B[^\b]a\Bbcabc
\uxxxx匹配以十六进制数编码的Unicode字符[\u4e00-\u9fa5]汉字/中文

2.元字符

字符含义举例结果
普通内容匹配自身abcabc
.匹配任意字符,除换行符"\n"外(在DOTALL模式中也能匹配换行符)a.c

abc;

a&c

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

a\.c;

a\\c

a.c;

a\c

*匹配前一个字符任意次abc*

ab;

abccc

+匹配前一个字符至少1次abc+

abc;

abccc

?匹配前一个字符0次或1次abc?

ab;

abc

^匹配字符串开头。在多行模式中匹配每一行的开头^abcabc
$匹配字符串末尾,在多行模式中匹配每一行的末尾abc$abc
|或。匹配|左右表达式任意一个,从左到右匹配,如果|没有包括在()中,则它的范围是整个正则表达式abc|def

abc

def
{}{m}匹配前一个字符m次,{m,n}匹配前一个字符m至n次,若{m,},则匹配m至无限次ab{1,2}cabc;
abbc
[]字符集。对应的位置可以是字符集中任意字符。字符集中的字符可以逐个列出,也可以给出范围,如[abc]或[a-c]。[^abc]表示取反,即非abc。
   注:所有特殊字符在字符集中都失去其原有的特殊含义。用\反斜杠转义恢复特殊字符的特殊含义。
a[bcd]eabe;
ace;
ade
()被括起来的表达式将作为分组,从表达式左边开始没遇到一个分组的左括号"(",编号+1.
分组表达式作为一个整体,可以后接数量词。表达式中的|仅在该组中有效。
(abc){2}
a(123|456)c
abcabc
a456c

3.特殊分组

分组描述举例结果
(?P<name>)分组命名。字母P大写(?P<id>abc){2}abcabc
(?P=name)引用命名分组匹配到的字符串(?P<id>\d)abc(?P=id)1abc1;
5abc5
\<number>引用编号为<number>的分组匹配到字符串(\d)abc\11abc1;
5abc5

三、常用方法

1)re.match(pattern, string, flags):尝试从字符串的【开头】匹配【一个】模式。
  text="JGood 666666 is a handsome boy, he is cool, clever, and so on..."
  m=re.match(r"(\w+)\s", text) #结果是“JGood ”
  m=re.match(r"\d+", text) #结果是None,因为数字不在开头

2)re.search(pattern, string, flags):在【整个】字符串内查找模式匹配,只到找到第一个匹配就返回。
  text="JGood 666666 is a handsome boy, he is cool, clever, and so on..."
  m=re.search(r"\d+", text) #结果是“666666”

3)re.findall(pattern, string, flags):获取字符串中所有匹配的字符串。
  text="JGood 666666 is a handsome boy, he is cool, clever, and so on..."
  m=re.findall(r'\e',text) #结果是['e', 'e', 'e', 'e']

4)re.finditer(pattern, string, flags):获取字符串中所有匹配的字符串,并把它们作为一个迭代器返回。

5)用正则表达式切分字符串比用固定的字符更灵活,如:
  re.split(r'\s+', 'a b c') #必须是re包的split()方法。以一个或多个空格切分。

6)re.compile(pattern, flags):把模板pattern编译成正则对象,提高效率。

compile方法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

7)正则表达式分组:用“()”表示的就是要提取的分组,然后用方法group(num1,num2)返回组号为num1,num2所匹配的字符串,groups()返回所有分组所组成的元组(通常不需参数)。
  正则匹配默认是贪婪匹配,也就是匹配尽可能多的字符。加问号“?”可以去除贪婪匹配。如:re.match(r'^(\d+?)(0*)$', '102300').groups()

  

  至此,转载请注明出处。

转载于:https://www.cnblogs.com/wcwnina/p/7217699.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值