本文写作思路和建议: 1、本文主要阐述了Python正则表达式的概念、常用操作、使用方法,方便快速了解正则表达式的应用; 2、学习之前建议对字符串进行深入的了解,比如字符串的常用操作等,因为正则表达式一般主要操作对象就是对于字符串的处理; 3、为了方便查看结果,文章开始就使用了python的re模块中match()方法,在文中后边会详细说明这个方法的使用技巧,前边使用只是为了输出我们需要的结果信息。
以下是关于正则的一些基本使用和操作。
import re
str_01 = "python is my favourite programing language!"
str_02 = "who is my favourite programing language of python! "
pat = r"^python"
str_result_01 = re.match(pat, str_01, re.I)
str_result_02 = re.match(pat, str_02, re.I)
print(str_result_01.string) # 输出为:python is my favourite programing language!
print(str_result_02) # 没有匹配到,输出为:None
① 这个格式表示用于匹配以字母qw开头的单词; ② 先从某个单词开始处(\b),然后匹配字母qw,接着是任意的字母或字符(\w*),最后是单词结束处(\b);
如匹配格式: \bqw\w*\b,那么下边的都可以匹配qw123213和qwerererer; 不能匹配123qw和werqw。
import re
pat_01 = r"\bqw\w*\b"
str_list = ["qw123213", "qwerererer", "123qw", "werqw"]
for i in range(4):
str_result = re.match(pat_01, str_list[i], re.I)
print(str_result)
# 输出为:
# <re.Match object; span=(0, 8), match='qw123213'>
# <re.Match object; span=(0, 10), match='qwerererer'>
# None
# None
代码 | 说明 |
---|---|
. | 匹配除换行符以外的任意字符 |
\w | 匹配字母、数字、下划线或汉字 |
\W | 匹配除字母、数字、下划线或汉字以外的字符 |
\s | 匹配单个空白符(包括tab键和换行符) |
\S | 匹配除单个空白符(包括tab键和换行符)以外的所有字符 |
\d | 匹配数字 |
\b | 匹配单词的开始或结束,单词的分界符通常是空格、标点符号或者换行 |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结尾 |
限定符 | 说明 |
---|---|
? | 匹配前边的字符零次或一次 |
+ | 匹配前边的字符一次或多次 |
* | 匹配前边的字符零次或多次 |
{n} | 匹配前边的字符n次 |
{n,} | 匹配前边的字符最少n次 |
{n,m} | 匹配前边的字符最少n次,最多m次 |
我们的需求是列表中有几组字符串,遍历列表后,把是6位数字的进行匹配,打印看结果是否能匹配到。
import re
pat_02 = r"^\d{6}$"
str_list = ["123456", "12345678", "123456789", "345678"]
for i in range(4):
str_result = re.match(pat_02, str_list[i], re.I)
print(str_result)
# 输出为:
# <re.Match object; span=(0, 6), match='123456'>
# None
# None
# <re.Match object; span=(0, 6), match='345678'>
正则表达式可以匹配数字和字母,因为这些有对应的元字符;
但是如果没有元字符的字符如何匹配呢?
以下是列举了一些没有元字符的字符匹配方式,方法就是直接在方括号中括起来即可:
【aeiou】,匹配任何一个英文元音字母 【.?!】,匹配标点符号(" . " 或" ? "或" ! ") 【0-9】,和"\d"一样,0-9任意一个数字 【a-z0-9A-Z】,等同于"\w"
import re
pat_03 = r"[a]"
str_list = ["aeiou1233", "23aeiou34", "a2e3i44o56u"]
for i in range(3):
str_result = re.match(pat_03, str_list[i], re.I)
print(str_result)
# 输出为:
# <re.Match object; span=(0, 1), match='a'>
# None
# <re.Match object; span=(0, 1), match='a'>
import re
pat_04 = r"[^a-zA-Z]"
str_list = ["abcdfg234324", "12354454", "a2e3i44o56u"]
for i in range(3):
str_result = re.match(pat_04, str_list[i], re.I)
print(str_result)
# 输出为:
# None
# <re.Match object; span=(0, 1), match='1'>
# None
import re
pat_05 = r"(^\d{11}$)|(^\d{8}$)"
str_list = ["13312344321", "02912341234", "1879245"]
for i in range(3):
str_result = re.match(pat_05, str_list[i], re.I)
print(str_result)
# 输出为:
# <re.Match object; span=(0, 11), match='13312344321'>
# <re.Match object; span=(0, 11), match='02912341234'>
# None
import re
pat_06 = r"[0-9]{1,3}\.[0-9]{1,2}\.[0-9]{1,3}\.[0-9]{1,3}"
str_list = ["127.0.0.1", "172.1.1.1", "192.168.2.1"]
for i in range(3):
str_result = re.match(pat_06, str_list[i], re.I)
print(str_result)
# 输出为:
# <re.Match object; span=(0, 9), match='127.0.0.1'>
# <re.Match object; span=(0, 9), match='172.1.1.1'>
# None
(ma|pa)th,匹配math和path
import re
re.match(pattern,s,flags)
pattern:模式字符串 s:要匹配的字符串 flags:可选,控制匹配方式
# -*- coding:utf-8 -*-
import re
pattern = r"http\w+"
s = "HTTPS://cloud.tencent.com/developer/user/10298071"
s1 = "博客地址HTTPS://cloud.tencent.com/developer/user/10298071"
mymatch = re.match(pattern, s, re.I)
mymatch1 = re.match(pattern, s1, re.I)
print(mymatch)
print(mymatch1)
# 输出为:
# HTTPS://cloud.tencent.com/developer/user/10298071
# None
标志 | 说明 |
---|---|
A或ASCII | 只进行ASCII 匹配 |
I或IGNORECASE | 匹配不区分大小写 |
M或MULTILINE | 将^和$用于包括整个字符串的开始和结尾的每一行 |
S或DOTALL | 使用(.)字符匹配所有字符 |
X或VERBOSE | 忽略模式字符串中未转义的空格和注释 |
re.search(pattern,s,flags)
pattern:模式字符串 s:要匹配的字符串 flags:可选,控制匹配方式
import re
pattern = r"http\w+"
s = "HTTPS://cloud.tencent.com/developer/user/10298071"
s1 = "博客地址HTTPS://cloud.tencent.com/developer/user/10298071"
mymatch = re.search(pattern, s, re.I)
mymatch1 = re.search(pattern, s1, re.I)
print(mymatch)
print(mymatch1)
# 输出为:
# <re.Match object; span=(0, 5), match='HTTPS'>
# <re.Match object; span=(4, 9), match='HTTPS'>
re.findall(pattern,s,flags)
pattern:模式字符串 s:要匹配的字符串 flags:可选,控制匹配方式
# -*- coding:utf-8 -*-
import re
pattern = r"http\w+"
s = "HTTPS://cloud.tencent.com/developer/user/10298071"
s1 = "博客地址HTTPS://cloud.tencent.com/developer/user/10298071"
mymatch = re.findall(pattern, s, re.I)
mymatch1 = re.findall(pattern, s1, re.I)
print(mymatch)
print(mymatch1)
# 输出为:
# ['HTTPS']
# ['HTTPS']
re.sub(patern, repl, s, count, flags)
patern:模式字符串 repl:替换的字符串 s:原始字符串 count:可选,替换的最大次数,默认为0 flags:控制匹配方式
import re
pattern = r"8[345]\d{6}"
s = "文章中编号为:83578910"
result = re.sub(pattern, "98765432", s)
print(result) # 输出为:文章中编号为:98765432
re.spilt(pattern, s, maxsplit, flags)
pattern:模式字符串 s:要匹配的字符串 maxsplit:可选,最大的拆分次数 flags:可选,控制匹配方式
import re
pattern = r"[?|&]"
s = "http://www.wertyy.com/login.jsp?username='admin'&password='123456'"
result = re.split(pattern, s)
print("原字符串:", s)
print("分割后的字符串:", result)
# 输出为:
# 原字符串: http://www.wertyy.com/login.jsp?username='admin'&password='123456'
# 分割后的字符串: ['http://www.wertyy.com/login.jsp', "username='admin'", "password='123456'"]
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。