py_正则表达式练习
正则表达式:
#正则表达式
#键盘数字6上的符号,^表示行的开始,$ 表示行的结束
#test = "tm queal Tomorrow Moon"
'''
^tm #匹配tm开头的文字
$tm #匹配
'''
# 元字符
# /b /w
'''
#字符类
[0-9] 等价于 \d[a-z0-9A-Z]等价于\w(只考虑英文)
#排除字符
^ 如在括号里面,表示排除这些字符 eg:[^a-zA-Z]
#选择字符
|表示选择,
(^\d{15}$)|(^\d(18)$)|(^\d{17}(\d|X|x))$ #匹配第一代身份证,第二代身份证
解释:^表示开始,为15个数字,并且以数字结尾,
或者以数字开头,18位的数字,并且以数字结尾,
或以数字开头,17位的数字,并且以X或x结尾
#转义字符:
例:需要匹配 127.0.0.1 [1-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}
'''
代码 | 元字符说明 |
. | 匹配换行符以外的任意字符 |
\w | 匹配字母,数字,下划线或汉字 |
\W | 匹配字母,数字,下划线或汉字以外的字符 |
\s | 匹配单个空白符(包括Tab和换行符) |
\S | 匹配单个空白符(包括Tab和换行符)以外的字符 |
\d | 匹配的数字 |
\b | 匹配单词的开始或者结束,但是通常是分界符是空格,标点符号或者换行 |
^ | 匹配字符的开始 |
$ | 匹配字符的结束 |
限定符 | 说明 | 举例 |
? | 匹配前面字符的0次或者1次 | colou?r ,可匹配到color和colour |
+ | 匹配前面字符的一次或者多次 | go+gle,可以匹配到:gogle,goo…ogle |
* | 匹配前面的字符的零次或者多次 | go*gle,可以匹配到:ggle,goo…ogle |
{n} | 匹配前面字符的n次 | go{2},可以匹配到:google |
{n,} | 匹配前面字符最少n次 | go{2,}gle,可以匹配到:google,goo...ogle |
{n,m} | 匹配前面字符最少n次,最多m次 | google{1,3} 可以匹配到:google,googleee |
import re #导入正则表达式模块
# 在py中match()
# re.match(pattern,string,[flags])
# \w 匹配字母数字下划线或者数字 +匹配前面字符的一次或者多次
# r 代表原始字符,防止出现转义
pattern = r'mr_\w+'
string = "MR_CODE mr_code"
match = re.match(pattern,string,re.I) # i表示不区分大小写
print(match)
#ps <re.Match object; span=(0, 7), match='MR_CODE'>
# 因为不匹配空格,故未匹配到 mr_code
# 将空格去掉后,MR_CODEmr_code 则可匹配到 MR_CODEmr_code
pattern2 = r'mr_\w+'
string2 = "sssMR_CODE mr_code"
match2 = re.match(pattern2,string2,re.I) # i表示不区分大小写
print(match2)
# 若未匹配到,返回None
# 在py中search()
pattern3 = r'mr_\w+'
string3 = "sssMR_CODE mr_code"
search = re.search(pattern3,string3,re.I) # i表示不区分大小写
print(search)
# <re.Match object; span=(3, 10), match='MR_CODE'>
pattern4 = r'mr_\w+'
string4 = "ssssssMR_CODE mr_code"
search2 = re.search(pattern4,string4,re.I) # i表示不区分大小写
print(search2)
# <re.Match object; span=(6, 13), match='MR_CODE'>
# 在py中findall()
pattern5 = r'mr_\w+'
string5 = "ssssssMR_CODE mr_code"
search5 = re.findall(pattern5,string5,re.I) # i表示不区分大小写
print(search5)
print("findall()")
# 在py中sub() 替换
pattern6 = r'1[34578]\d{9}'
string6 = "中奖号码为:89332,联系电话:13611111111"
search6 = re.sub(pattern6,'1我爱学py',string6) # i表示不区分大小写
print("sub()")
print(search6)
# 中奖号码为:89332,联系电话:1我爱学py