元字符表
符号 | 含义 |
---|---|
. | 匹配除换行符以外的任意字符 |
^ | 匹配字符串的开始位置 |
$ | 匹配字符串的结束位置 |
* | 匹配0次、1次或者多次前面的原子 |
? | 匹配0次或1次前面的原子 |
+ | 匹配1次或多次前面的原子 |
{n} | 前面的原子恰好出现n次 |
{n,} | 前面的原子至少出现了n次 |
{n,m} | 前面的原子至少出现n次,至多出现m次 |
| | 模式选择符 |
() | 模式单元符 |
总体来说,元字符可以分为:任意匹配元字符、边界限制元字符、限定符、模式选择符、模式单元等
(1) 任意匹配元字符
例如:我们可以使用正则表达式’.python…’匹配一个’python’字符前面有1位,后面有3位格式的字符
import re
pattern = ".python..."
string = "abcdfphp345pythony_py"
result = re.search(pattern, string)
print("任意匹配元字符结果:%s" % result)
# 任意匹配元字符结果:<_sre.SRE_Match object; span=(10, 20), match='5pythony_p'>
(2) 边界限制元字符
边界限制符,’^’匹配字符串的开始,使用’$’匹配字符串的结束
import re
pattern1 = "^abd" # 以abd开头的字符串
pattern2 = "^abc" # 以abc开头的字符串
pattern3 = "py$" # 以py结尾的字符串
pattern4 = "ay$" # 以ay结尾的字符串
string = "abcdfphp345pythony_py"
result1 = re.search(pattern1, string)
result2 = re.search(pattern2, string)
result3 = re.search(pattern3, string)
result4 = re.search(pattern4, string)
print("结果1:%s" % result1) # 结果1:None
print("结果2:%s" % result2) # 结果2:<_sre.SRE_Match object; span=(0, 3), match='abc'>
print("结果3:%s" % result3) # 结果3:<_sre.SRE_Match object; span=(19, 21), match='py'>
print("结果4:%s" % result4) # 结果4:None
(3) 限定符
常见的限定符包括*、?、+、{n}、{n,}、{n,m}
import re
pattern1 = "py.*n" # n和py中间除换行符意外的任意字符
pattern2 = "cd{2}" # c后出现了2次d
pattern3 = "cd{3}" # c后出现了3次d
pattern4 = "cd{2,}" # c后至少出现了2次d
string = "abcdddfphp345pythony_py"
result1 = re.search(pattern1, string)
result2 = re.search(pattern2, string)
result3 = re.search(pattern3, string)
result4 = re.search(pattern4, string)
print("限定符结果1:%s" % result1) # 限定符结果1:<_sre.SRE_Match object; span=(13, 19), match='python'>
print("限定符结果2:%s" % result2) # 限定符结果2:<_sre.SRE_Match object; span=(2, 5), match='cdd'>
print("限定符结果3:%s" % result3) # 限定符结果3:<_sre.SRE_Match object; span=(2, 6), match='cddd'>
print("限定符结果4:%s" % result4) # 限定符结果4:<_sre.SRE_Match object; span=(2, 6), match='cddd'>
(4) 模式选择符
模式选择符’|’
使用模式选择符,可以设置多个模式,匹配时,可以从中选择任意一个模式匹配。
例如:正则表达式’python|php’中,字符串’python’和’php’均满足匹配条件
import re
pattern = "python|php"
string = "abcdfphp345pythony_py"
result = re.search(pattern, string)
print("模式选择符结果:%s" % result)
# 模式选择符结果:<_sre.SRE_Match object; span=(5, 8), match='php'>
(5) 模式单元符
模式单元符(),可以使用’()’将一些原子组合成一个大原子使用,小括号括起来的部分会被当做一个整体去使用
import re
pattern1 = "(cd){1,}" # cd至少出现一次
pattern2 = "cd{1,}" # c字母后的d至少出现1次
string = "abcdcdcdcdfphp345pythony_py"
result1 = re.search(pattern1, string)
result2 = re.search(pattern2, string)
print("结果1:%s" % result1) # 结果1:<_sre.SRE_Match object; span=(2, 10), match='cdcdcdcd'>
print("结果2:%s" % result2) # 结果2:<_sre.SRE_Match object; span=(2, 4), match='cd'>