版权声明:转载注明出处 https://blog.csdn.net/qq_19428987/article/details/87946698
正则表达式是一个概念,匹配符合某个规则的字符串,各个编程语言都有。常用来查找/替换。
正则表达式的写法:
- .(点号):表示任意一个字符(除了\n)
- []:匹配中括号中列举的任意字符。
- \d:任意一个数字
- \D:除了数字都可以
- \s:表示空格,tab键
- \S:除了空白符号
- \w:单词字符,就是a-z,A-Z,0-9,_
- \W:除了\w的内容
- *:表示前面内容重复零次或者多次,\w *
- +:表示前面的内容至少出现过一次
- ?:前面才出现的内容零次或者一次
- ^:匹配字符串的最开始
- $ : 匹配字符串的结尾
- {m,n}:允许前面的内容至少出现m次,最多n次
- \b:匹配单词的边界
- ():被括起来的表达式将作为分组,从表达式左边开始没遇到一个分组的左括号“(”,编号+1.
分组表达式作为一个整体,可以后接数量词。表达式中的|仅在该组中有效。
验证一个数字:^\d$ ;
必须要有一个数字,最少一位:^\d+$ ;
只能出现数字,且位数为5-10位数:^\d{5,10}$ ;
注册者输入年龄(16~99):^ [16-99]$
只能输入英文字符和数字:^ [A-Za-z0-9]$ - \A:只匹配字符串开头,\Aabcd ,则abcd
- \Z:仅匹配字符串末尾,abcd\Z,则abcd
- | :左右任意一个
- (?P < name >) :分组,除了原有的编号外再指定一个额外的别名,
- (?P=name):引用别名为的分组匹配到字符串
RE使用大致步骤
- 导入相关的包:re
- 使用compile讲正在字符串编译为一个pattern对象
- 通过pattern对象提供一系列方法对文本进行查找匹配,获得匹配结果,一个Match对象
- 最后根据Match对象提供的属性和方法获得信息进行相应的操作
Re常用函数
- group:获得一个或者多个匹配的字符串,当获得整个匹配的子串时直接使用group或者group(0)
- start:获取分组匹配的子串在整个字符串中的真实位置,默认参数为0
- end:获取分组匹配的子串在整个字符串中的结束位置,默认为0
- span:返回的结构技术(start(gourp),end(group))
import re
p=re.compile(r'([a-z]+) ([a-z]+)',re.I)
match=p.match("I love learing")
print(match.groups()) #匹配
q=re.compile(r'\d+') #匹配数字
m=q.search("one1235two45three") #找到第一个数字字符串
n=q.findall("one1235two45three") #找出所有数字字符串
print(m)
print(n)
rest=q.sub(r" ","one1235two45three") # 讲数字字符串找出并替换成“ ”(空格)
print(rest)
输出结果:
('I', 'love')
<_sre.SRE_Match object; span=(3, 7), match='1235'>
['1235', '45']
one two three
- 匹配中文:大部分中文内容表示的范围[u4e00-u9fa5],不包括全角标点
- 贪婪:尽可能多的匹配,(*)表示贪婪匹配
- 非贪婪匹配:找到符合条件的最小内容,(?)表示非贪婪
- 正则默认是贪婪匹配
暂时初步了解一下Python的正则表达式,要写出比较好的正则表达式还是比较难得,需要在实际应用中去积累增加经验。后续实践之后再回来更新一下这篇博客吧。