$ 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)
随机推荐
- 带你了解UIKit动力学
一.简单介绍 1.什么是UIDynamic UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架可以认为是一种物理引擎,能模拟和仿真现实生活中的物理现象如:重力.弹性碰撞等现象 ...
- How tomcat works学习笔记
最近在看Tomcat的源码, 所以找了一本相关的书籍<How tomcat works>. 博客内容多为 学习该书时所记录的笔记.(如有侵权行为,请联系我:eviltomorrow@163 ...
- Java 学习笔记之读取jdbc.propertyes配置参数
package test; import java.io.IOException; import java.io.InputStream; import java.util.Properties; p ...
- IE的卸载之路(折腾1个多月,记录下。。)
IE 9: FORFILES /P %WINDIR%/servicing/Packages /M Microsoft-Windows-InternetExplorer-*9.*.mum /c “cmd ...
- android EditText 限定中文个数与英文个数的解决方式
EditText 限定中文8个英文16个的解决方法. 在EditText上控件提供的属性中有限定最大最小长度的方法. 可是,对于输入时,限定中文8个英文16个时,怎么办?相当于一个中文的长度是两个英文 ...
- windows 32位以及64位的inline hook
Tips : 这篇文章的主题是x86及x64 windows系统下的inline hook实现部分. 32位inline hook 对于系统API的hook,windows 系统为了达成hotpatc ...
- js 触摸事件 touch
//ban 为某div let startX = 0; ban.addEventListener("touchstart",function(){ //获取初始点击位置 start ...
- "无法加载 DLL“oramts.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。" —— 的解决方法
Oramts.dll 文件公开登记 Oracle 连接所涉及到在通过 Microsoft 分布式事务处理协调器 (MSDTC) 启动的事务中的公共 API. 在事务处理环境中运行时, Syste ...
- 面试十大常见Java String问题
本文介绍Java中关于String最常见的10个问题: 1. 字符串比较,使用 "==" 还是 equals() ?简单来说, "==" 判断两个引用的是不是同 ...
- iOS学习笔记(二)——Hello iOS
前面写了iOS开发环境搭建,只简单提了一下安装Xcode,这里再补充一下,点击下载Xcode的dmp文件,稍等片刻会有图一(拖拽Xcode至Applications)的提示,拖拽至Applicatio ...