Python学习笔记08-正则表达式

2017-11-28  本文已影响0人  如梦似幻之旅

正则表达式(Regular Expression,在代码中常简写为regex、regexp或RE),是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些匹配某个模式的文本。

在Python中需要通过正则表达式对字符串进行匹配的时候,可以使用re模块。

re模块

# re.match(正则表达式,要匹配的字符串)
# re.match() 能够匹配出以xxx开头的字符串
result = re.match('hello','helloworld')
# 使用match方法进行匹配操作
# 如果上一步匹配到数据的话,可以使用group方法来提取数据
print(result.group())

匹配单字符

字符 功能
. 匹配任意1个字符(除了\n)
[ ] 匹配[ ]中列举的字符
\d 匹配数字,即0-9
\D 匹配非数字,即不是数字
\s 匹配空白,即 空格,tab键
\S 匹配非空白
\w 匹配单词字符,即a-z、A-Z、0-9、_
\W 匹配非单词字符

原始字符串

使用原始字符串解决正则表达式需要匹配的文本包含转义字符“\”的问题。原始字符串是在字符串前加上r。

mm = "c:\\a\\b\\c"
ret = re.match(r"c:\\a",mm).group()
print(ret)

匹配多个字符

字符 功能
* 匹配前一个字符出现0次或者无限次,即可有可无
+ 匹配前一个字符出现1次或者无限次,即至少有1次
? 匹配前一个字符出现1次或者0次,即要么有1次,要么没有
{m} 匹配前一个字符出现m次
{m,} 匹配前一个字符至少出现m次
{m,n} 匹配前一个字符出现从m到n次

示例

[A-Z][a-z]* 匹配首字母大写后面都是小写字母并且这些小写字母可有可无 
[a-zA-Z_]+[\w_]* 匹配变量名是否有效
[1-9]?[0-9] 匹配0到99之间的数字
[a-zA-Z0-9_]{8,20} 匹配8到20位的密码,可以是大小写英文字母、数字、下划线

匹配边界

字符 功能
^ 匹配字符串开头
$ 匹配字符串结尾
\b 匹配一个单词的边界
\B 匹配非单词边界

匹配分组

字符 功能
匹配左右任意一个表达式
(ab) 将括号中字符作为一个分组
\num 引用分组num匹配到的字符串
(?P<name>) 分组起别名
(?P=name) 引用别名为name分组匹配到的字符串

re模块中常用函数

函数 说明
compile() 根据包含正则表达式的字符串创建模式对象
search() 在字符串中寻找模式
match() 在字符串的开始处匹配模式
split() 根据模式的匹配项来分割字符串
findall() 列出字符串中模式的所有匹配项
sub(pat,repl,string[,count=0]) 将字符串中的所有pat的匹配项用repl替换
escape() 将字符串中所有特殊正则表达式字符转义
import re

pat = r'\d+'
string = '人民币100万'
print(re.search(pat, string).group())
if re.search(pat, string):
    print('found it')

some_text = 'alpha.beta...game'
print(re.split('[.]+', some_text))

pat1 = '[a-zA-Z]+'
text = 'Hm...are you sure?'
print(re.findall(pat1, text))

pat2 = '{name}'
text1 = 'Dear {name}...'
print(re.sub(pat2, 'xiaoli',text1))

print(re.escape('www.python.org'))
print(re.escape('hello world'))

结果

100
found it
['alpha', 'beta', 'game']
['Hm', 'are', 'you', 'sure']
Dear xiaoli...
www\.python\.org
hello\ world
上一篇下一篇

猜你喜欢

热点阅读