记录:备忘录。
名词:
正则表达式,Regular Expression。
正则表达式,使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。
1.正则表达式配关键字符
序号 | 字符 | 功能 | 类别 |
1 | . | 匹配任意1个字符(除了\n) | 表示字符 |
2 | [ ] | 匹配[ ]中列举的字符 | 表示字符 |
3 | \d | 匹配数字,即0-9 | 表示字符 |
4 | \D | 匹配非数字,即不是数字 | 表示字符 |
5 | \s | 匹配空白,即 空格,tab键 | 表示字符 |
6 | \S | 匹配非空白 | 表示字符 |
7 | \w | 匹配单词字符,即a-z、A-Z、0-9、_ | 表示字符 |
8 | \W | 匹配非单词字符 | 表示字符 |
9 | * | 匹配前一个字符出现0次或者无限次,即可有可无 | 表示数量 |
10 | + | 匹配前一个字符出现1次或者无限次,即至少有1次 | 表示数量 |
11 | ? | 匹配前一个字符出现1次或者0次,即要么有1次,要么没有 | 表示数量 |
12 | {m} | 匹配前一个字符出现m次 | 表示数量 |
13 | {m,} | 匹配前一个字符至少出现m次 | 表示数量 |
14 | {m,n} | 匹配前一个字符出现从m到n次 | 表示数量 |
15 | ^ | 匹配字符串开头;除非在方括号表达式中使用,当该符号在方括号表达式中使用时,表示不接受该方括号表达式中的字符集合 | 表示边界 |
16 | $ | 匹配字符串结尾 | 表示边界 |
17 | \b | 匹配一个单词的边界 | 表示边界 |
18 | \B | 匹配非单词边界 | 表示边界 |
19 | | | 匹配左右任意一个表达式 | 表示边界 |
20 | (ab) | 将括号中字符作为一个分组 | 匹配分组 |
21 | \num | 引用分组num匹配到的字符串 | 匹配分组 |
22 | (?P<name>) | 分组起别名 | 匹配分组 |
23 | (?P=name) | 引用别名为name分组匹配到的字符串 | 匹配分组 |
2.python的正则表达式例子
import re
#匹配测试
ret = None
ret = re.match("[A-Z][a-z]*","Awertyuiopoper")
ret = re.match("[a-zA-Z_]+[\w_]*","yao最美的人")
ret = re.match("[1-9]?[0-9]?[0-9]","5678")
ret = re.match("[a-zA-Z0-9_]{8}","8a765c4321")
ret = re.match("[a-zA-Z0-9_]{8,20}","1qazxsw23edcvfr4")
ret = re.match("[a-zA-Z0-9_]{8,20}","1qazxsw")
ret = re.match("[1-9]?\d$|100","53")
ret = re.match("[1-9]?\d$|100","10")
ret = re.match("\w{4,20}@(163|126|qq)\.com", "zhangbeizhen18@163.com")
ret = re.match("<[a-zA-Z]*>\w*</[a-zA-Z]*>", "<html>yaoGG</html>")
try:
ret = ret.group()
print(ret)
except:
print("匹配不正确")
#匹配搜索
ret = re.search(r"\d+", "zhangbeizhen阅读次数为 157659")
try:
ret = ret.group()
print(ret)
except:
print("匹配不正确")
#匹配别名
try:
ret = re.match(r"<([a-zA-Z]*)>\w*</\1>", "<html>yao</html>").group()
print(ret)
except:
print("匹配不正确")
try:
ret = re.match(r"<([a-zA-Z]*)>(\w*)</\1>", "<html>yaoZZ</html>").group()
print(ret)
except:
print("匹配不正确")
try:
ret = re.match(r"<(\w*)><(\w*)>.*</\2></\1>", "<html><p>www.zhangbeizhen18.com</p></html>").group()
print(ret)
except:
print("匹配不正确")
try:
ret = re.match(r"<(?P<name1>\w*)><(?P<name2>\w*)>.*</(?P=name2)></(?P=name1)>",
"<html><p>www.zhangbeizhen18.cn</p></html>").group()
print(ret)
except:
print("匹配不正确")
#匹配单个字符串
info="zhangbeizhen18的博客"
try:
result = re.match("zhangbeizhen18", info).group()
print(result)
except:
print("匹配不正确")
# 匹配列表
ret = re.findall(r"\d+", "python = 985, c = 211, c++ = 111")
try:
print(ret)
except:
print("匹配不正确")
# 匹配替换
ret = re.sub(r"\d+", '985', "python = 211")
try:
print(ret)
except:
print("匹配不正确")
#匹配分组
ret = re.split(r":|&","info:xiaoZhang 33&shandong")
try:
print(ret)
except:
print("匹配不正确")
#匹配邮箱
pattern = re.compile("[\w]{4,20}@163\.com")
search = pattern.search('zhangbeizhen18@163.com$')
try:
print(search.group(0))
except:
print("匹配不正确")
# 匹配网址
info="http://www.zhangbeizhen18.com:8080/workInfo/work.html"
try:
pattern = re.compile(r"(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)")
result = pattern.search(info)
print(result.group())
except:
print("匹配不正确")
info="http://www.zhangbeizhen18.com:8080/workInfo/work.html"
try:
result = re.match("(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)", info).group()
print(result)
except:
print("匹配不正确")
info="www.zhangbeizhen18.com"
try:
result = re.match("([^/:]+)", info).group()
print(result)
except:
print("匹配不正确")
#匹配字符
info="I love Yao Yao."
try:
pattern = re.compile(r"\b([a-z,A-Z]+) \1\b")
result = pattern.search(info)
print(result.group())
except:
print("匹配不正确")
# \B 非单词边界匹配
info="zhang beizhen"
try:
pattern = re.compile(r"\Beizhe\B")
result = pattern.search(info)
print(result.group())
except:
print("匹配不正确")
# \b 匹配一个单词边界,即字与空格间的位置。
info="zhang beizhen"
try:
pattern = re.compile(r"\bbeizhen\b")
result = pattern.search(info)
print(result.group())
except:
print("匹配不正确")
# ^匹配开头,$ 匹配结尾
info="第 50"
try:
result = re.match("^第 [1-9][0-9]{0,1}$", info).group()
print(result)
except:
print("匹配不正确")
# .匹配一个字符,* 匹配任意字符
info="<h1>zhangbeizhen18的博客</h1>"
try:
result = re.match("<\w+?>", info).group()
print(result)
except:
print("匹配不正确")
info="<h1>zhangbeizhen18的博客</h1>"
try:
result = re.match("<.*>", info).group()
print(result)
except:
print("匹配不正确")
# 匹配数字
info="第 50"
try:
result = re.match("^第 [1-9][0-9]{0,1}", info).group()
print(result)
except:
print("匹配不正确")
try:
result = re.match("[1-9][0-9]{0,1}", "5678").group()
print(result)
except:
print("匹配不正确")
try:
result = re.match("[1-9][0-9]?", "5678").group()
print(result)
except:
print("匹配不正确")
try:
result = re.match("[1-9][0-9]*", "5678").group()
print(result)
except:
print("匹配不正确")
try:
result = re.match("[0-9]{1,2}", "5678").group()
print(result)
except:
print("匹配不正确")
# ? 问号代表前面的字符最多只可以出现一次(0次、或1次)
try:
result = re.match("beizhe?n", "beizhn").group()
print(result)
except:
print("匹配不正确")
# * 号代表字符可以不出现,也可以出现一次或者多次(0次、或1次、或多次)
try:
result = re.match("beizhe*n", "beizheeeen").group()
print(result)
except:
print("匹配不正确")
# + 号代表前面的字符必须至少出现一次(1次或多次)
try:
result = re.match("beizhe+n", "beizhen").group()
print(result)
except:
print("匹配不正确")
try:
result = re.match("beizhe+n", "beizhen").group()
print(result)
except:
print("匹配不正确")
以上,感谢。