本文主要介绍python中正则表达式的基本用法,做一个初步的认识。

1. 初识

python通过re内置模块来处理正则表达式(regex),底层使用C引擎。一个简单的正则匹配的例子:

import re
# 正则
p = re.compile(r'[a-zA-Z0-9]')
s = 'hello 123, world!'
print re.findall(p,s) # 输出:
# ['h', 'e', 'l', 'l', 'o', '1', '2', '3', 'w', 'o', 'r', 'l', 'd']

元字符:所谓元字符,指的是那些不仅仅可以表示字符本身含义、并且还可以表示其他特殊含义的字符。正则中的元字符主要有如下这些:

. ^ $ * + ? { } [ ] \ | ( )

要在正则中匹配元字符本身,需要使用转义符号,比如如果要匹配"+"符号,则在正则中要写成:"\+".

2. 正则元字符含义解释

1. [ ]

(1) 常用来指定一个字符集,如[abc]匹配:a或b或c

(2) 元字符在"[]"中不起所用,比如:[a+]匹配:a或+

但注意:在方括号中要匹配转义符“\”本身,要用:"\\";要匹配方括号开头的"^"符本身,要用:"^";要匹配"-"字符,需要用:"\-"

(3) 补集匹配:[^a],匹配非a的一个字符

(4) 匹配连续字符:[a-zA-Z0-9],匹配大小写英文字母和数字

2. ^

匹配行首,在MULTILINE模式中,直接匹配字符串中的每一个换行。

3. $

匹配行尾,行尾是指:字符串尾,或一个换行字符后的任何位置。

4. \

转义字符,如果要匹配""本身,需要使用再次转义:"\\"。

一些特殊字符:

\d:匹配:[0-9]

\D:匹配:[^0-9]

\s:匹配:任何空白符,即:[\t\n\r\f\v]

\S:匹配:任何非空白符,即:[^\t\n\r\f\v]

\w:匹配:[a-zA-Z0-9_ ]

\W:匹配:[^a-zA-Z0-9_ ]

5. *

匹配前一个字符或子表达式出现0次或多次。

6. +

匹配前一个字符或子表达式出现1次或多次。

7. ?

(1) 匹配前一个字符或子表达式出现1次或0次。

(2) 表示非贪婪匹配:

import re
# 贪婪模式,会尽量多地去匹配
r1 = re.compile(r'ab+')
s1 = 'abbb'
print re.findall(r1,s1) # 非贪婪模式,会尽量少地去匹配
r2 = re.compile(r'ab+?')
s2 = 'abbb'
print re.findall(r2,s2) # 输出:
'''
['abbb']
['ab']
'''

8. {}

匹配前一个字符或子表达式出现指定次数:

  • {0,}:0次或多次,相当于"*"

  • {1,}:1次或多次,相当于"+"

  • {0,1}:0次或1次,相当于"?"

  • {m,n}:m次到n次(m <= n)

随机推荐

  1. 快速上手UIView动画

    UIView动画有两种使用方法 UIView [begin commit]模式 //动画开始标记 [UIView beginAnimations:@"changeframe" co ...

  2. 如何查询当前手机的cpu架构,so库导入工程又出异常了?

    执行adb命令: adb shell cat /proc/cpuinfo 对应文件夹 AArch64 == arm64-v8a ARMv7 == armeabi-v7a ............等 其 ...

  3. Xshell配色方案(Solarized Dark)

    将以下内容复制并保存到文件中,文件名以xc为后缀,如:Solarized Dark.xcs [Solarized Dark] text= cyan(bold)=93a1a1 text(bold)= m ...

  4. 创建动作-Action:

    在Struts2的行动,唯一的要求是,必须有一个无参数的方法,该方法返回一个字符串或结果的对象,必须是一个POJO.如果不带参数的方法不指定,则默认行为是使用execute()方法. 您也可以选择扩展 ...

  5. 通信协议之广播---recvfrom 放回客户端的ip地址第一次全为0.0.0.0

    遇到一个很恶心的问题. while(1) { recvfrom(sockfd, readbuff, UDP_CMD_BUFF_LENGTH - 1, 0, (struct sockaddr *)&am ...

  6. 【HDU 5305】Friends 多校第二场(双向DFS)

    依据题意的话最多32条边,直接暴力的话 2 ^ 32肯定超时了.我们能够分两次搜索时间复杂度降低为 2 * 2  ^ 16 唯一须要注意的就是对眼下状态的哈希处理. 我採用的是 十进制表示法 跑的还是 ...

  7. php+redis秒杀

    啥都不说了,看代码 前台: 包括开始和结束的秒杀时间,倒计时插件,统一看一遍再去写代码,思路会更清晰. js文件引入一个.min.js和一个插件js(在下面,自己复制吧) // JavaScript ...

  8. python socket编程入门(编写server实例)+send 与sendall的区别与使用方法

    python 编写server的步骤: 1. 第一步是创建socket对象.调用socket构造函数.如: socket = socket.socket( family, type ) family参 ...

  9. selenium-webdriver 中执行js代码

    #获取标签的text文本值 js1="return document.getElementById('key1').innerText" dr.execute_script(js1 ...

  10. 2014-08-28——移动端web开发,基本Meta标签

    1.<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scal ...