$ python正则表达式系列(1)——正则元字符
本文主要介绍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)
随机推荐
- 日志系统之扩展Flume-LineDeserializer
本人博客文章如未特别注明皆为原创.如有转载请注明出处:http://blog.csdn.net/yanghua_kobe/article/details/46595401 继续闲聊日志系统,在之前的博 ...
- 在虚拟机VMware Workstation上安装win7系统
之前讲过虚拟机的安装过程,虚拟机安装完成之后,就需要在虚拟机上安装操作系统了,这次就讲讲怎么在虚拟机上安装操作系统. 工具/原料 VMware Workstation win7系统盘 iso格式 ...
- Microsoft SQL Server JDBC 驱动程序支持矩阵
本页包含 Microsoft SQL Server JDBC 驱动程序的支持矩阵和支持生命周期策略. Microsoft JDBC 驱动程序支持生命周期矩阵和策略 Microsoft 支持生命周期 ( ...
- 用Java实现一些常见的问题
八皇后 public class EightQueen { private static final int ROW = 4; private static final int COL = 4; pr ...
- Android开发——初步
一.项目结构介绍
- Codeforces Round #404 (Div. 2) DE
昨晚玩游戏竟然不小心错过了CF..我是有多浪啊. 今天总算趁着下课时间补了,感觉最后两题还是挺有意思的,写个题解. D: 题目大意: 给出一个括号序列,问有多少个子序列 是k个'(' + k个')' ...
- What is special about /dev/tty?
ls -la /dev/tty shows the output: crw-rw-rw- 1 root tty 5, 0 Dec 14 22:21 /dev/tty The 'c' means it' ...
- linux oracle配置开机启动
参考:http://jingyan.baidu.com/article/b2c186c8fe4306c46ef6ff16.html 先以root身份登录到linux系统, 1. 修改vi /etc/o ...
- HDU 2571 命运 (简单DP)
命运 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...
- 多线程编程中的join函数
# coding: utf-8 # 测试多线程中join的功能 import threading, time def doWaiting(): print 'start waiting1: ' + t ...