RE regular expression正则表达式 regex
正则表达式的使用过程:生成字符串(符合正则语法)--->编译成正则表达式特征-->进行匹配
编译前只是一个符合正则语法的字符串,编译后才是真正的正则表达式
ASCII字符集是最早的字符集,只有128个
unicode字符集包括所有语言,python3以上字符默认用unicode编码
raw string代表原生字符串(非专义)的原始字符串
unicode string代表字符串,会将里面的字符转义
注意!!!python re中不涉及转义,字符串和原生字符串有一样效果,re.函数不编译也可用
\(行尾) 续航符 \\反斜线 \'单引号 \"双引号 \000空 \oyy 八进制数 \xyy 十六进制数 \other其它字符以普通格式输出
\a响铃 \b退格 \e转义 \f换页 \n换行 \r回车 \t横向制表符 \v纵向制表符
博客:aariety介绍的比较详细
#字符串""中可以使用\"表示"字符
#字符串中可以使用\\表示\字符
a1="ab\\cd" #转义,认为字符串是ab\cd 等同r"ab\cd"
b1="ab\'cd" #认为字符串是ab'cd 等同r"ab'cd"
c1="ab\"cd" #认为字符串是ab"cd 等同r'ab"cd'
d1="\'\"" #表达字符'" 无法用r的单双引号表示!!可以用'''
#原生字符串""中无法表示"字符
#原生字符串中无法表示单个\字符
a2=r"ab\\cd" #不转义,认为字符串是ab\\cd 等同"ab\\\\cd"
b2=r"ab\'cd" #认为字符串是ab\'cd 等同"ab\\\'cd"
c2=r"ab\"cd" #认为字符串是ab\"cd 等同"ab\\\"cd"
d2="\'\"" #表达字符\'\" 等同"\\\'\\\""
. 任何单字符
[] 字符集,取值范围。[abc]表示a、b、c,[a-z]表示a到z的单字符
[^] 非字符集,给出排除范围。[^abc]表示非a、b、c的单字符
* 前一个字符0次或无限次扩展
+ 前一个字符1次或无限次扩展
? 前一个字符0次或1次扩展
| 左右表达式任意一个。abc|def表示abc、def均可
{m} 扩展前一个字符m次。ab{2}c表示abbc
{m,n} 扩展前一个字符m到n次(含n)。ab{1,2}c表示abc、abbc
^匹配字符串的开头。注意与[^]相区分
$匹配字符串的结尾
()分组,内部只能用|
\d数字,等价于[0-9]
\w单词字符,等价于[a-zA-Z0-9]
re.search(pattern,string,flags=0)
pattern字符串或原生字符串
string待匹配字符串
flags控制标记
控制标记:
re.I re.IGNORECASE忽略正则表达式的大小写
re.M re.MULTILINE正则表达式^能每行匹配
re.S re.DOTALL点.匹配所有字符,默认是不匹配换行
re.match(pattern,string,flags=0)
re.findall(pattern,string,flags=0)
re.split(pattern,string,maxsplit=0,flags=0)
maxsplit:最大分割数,剩余部分作为最后一个元素输出
re.finditer(pattern,string,flags=0) 返回迭代类型,每个迭代元素是match对象
re.sub(pattern,repl,string,count=0,flags=0) 返回替换后的字符串
repl:替换匹配字符串的字符串
count:匹配最大的替换次数
re.compile(pattern,flags=0) 将正则表达式编译,可用regex调用上面六个函数
#函数式用法,一次性操作
rst = re.search(r'[1-9]\d{5}','BIT 100081')
#面向对象用法:编译后多次操作
pat = re.compile(r'[1-9]\d{5}')
rst = pat.search('BIT 100081')
属性
.string待匹配的文本,返回string
.re匹配时使用的正则表达式
.pos文本开始位置,返回int
.endpos文本结束位置,返回int
方法
.group(0)匹配后的字符串,返回第一次返回的结果
.start()匹配字符串在原始字符串的开始位置,返回int
.end()匹配字符创在原始字符创的结束位置,返回int
.span()返回(.start(),.end()),返回元组类型
match = re.match(r'PY.*N','PYTHONCNDN')
match.group(0)
#贪婪匹配,返回PYTHONCNDN
match = re.match(r'PY.*?N','PYTHONCNDN') #注意加了个?号
match.group(0)
#最小匹配,返回PYTHON
最小匹配的操作符:*? +? ?? {m,n}?