"""正则表达式re
概念
检索符合某个规则的字符串。
通用的字符串表达框架。
简洁表达一组字符串。
常用
表达文本类型的特征。
同时查找或替换一组字符串。
匹配字符串全部或部分。"""
# --------------------------------------
"""正则表达式语法
常用操作符
. # 表示任何单字符。
[] # 字符集,对单个字符给出取值范围。[abc][a-z]
[^] # 非字符集。[^abc]除了abc以外的单个字符
* # 前一个字符0次或无限次扩展。
+ # 前一个字符1次或无限次扩展。
? # 前一个字符0次或1次扩展。
| # 左右表达式任意一个,等同于或。
{m} # 扩展前一个字符m次,ab{2}c表示abbc。
{m, n} # 扩展前一个字符m或n,ab{1, 2}c表示abc和abbc。
^ # 匹配字符串开头,^abc表示字符串abc且在一个字符串开头。
$ # 匹配字符串结尾,abc$表示字符串abc且在一个字符串结尾。
() # 分组标记,(abc|def)表示abc和def。
\d # 数字,等价于[0-9]。
\w # 单词字符,等价于[A-Za-z0-9]。
实例
P(Y|YT|YTH|YHTO)?N # 'PN' 'PYN' 'PYTN' 'PYTHN' 'PYTHON'
PYTHON+ # 'PYTHON' 'PYTHONN' 'PYTHONNN' ... ...
PY[TH]ON # 'PYTON' 'PYHON'
PY{:3}N # 'PN' 'PYN' 'PYYN' 'PYYYN'
IP地址
\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3} # 表示四个用.分隔开的三位数。
精确表示
0-99: [1-9]?\d
100-199: 1\d{2}
200-249: 2[0-4]\d
250-255: 25[0-5]
IP: (([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5]).){3}([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])
# {3}重复三个0-255的数字后加'.' 最后加一个0-255的数字。"""
# ----------------------------------------------------
"""re库主要功能函数
re.search() # 搜索第一个匹配正则表达式的对象。
re.match() # 只在开始位置搜索匹配对象。
re.findall() # 搜索整个字符串,返回全部匹配对象, 返回列表类型。
re.split() # 按匹配结果进行分割,返回列表类型。
re.finditer() # 搜索字符串,返回第一个匹配结果的迭代类型。
re.sub() # 替换所有匹配字符串,返回替换后的字符串。
pattern # 正则表达式字符串,原生字符串。
string # 要匹配的字符串。
flags # 正则表达式使用时的控制标记。
re.search(pattern, string, flags=0)
re.match(pattern, string, flag=0)
re.sub(pattern, repl, string, count=0, flags=0)
repl # 替换匹配字符串的字符串。
count # 替换匹配的最大次数。"""
import re
match = re.search(r'[1-9]\d{5}', 'BIT 100081')
print(match.span()) # (4, 10)匹配到的字符位置
print(match.group())
match1 = re.match('[1-9]\d]{5}', 'BIT 100081')
if match1: # 如果match1中没有匹配到元素,输出None.
print(match.group())
else:
print('None')
li = re.findall(r'[1-9]\d{5}', 'BIT 100081 IAS 124565')
print(li) # findall返回的是一个列表
li1 = re.split(r'[1-9]\d{5}', 'BIT 100081 IAS 124565')
print(li1) # ['BIT ', ' IAS ', ''] 将匹配到的部分去掉,分割剩下的字符串。
"""正则表达式re
概念
检索符合某个规则的字符串。
通用的字符串表达框架