正则表达式是对字符串操作的一种逻辑公式(这个有用处),http://tool.oschina.net/regex/可以用来对正则表达式的测试。常用匹配模式:
\d:数字;.:除换行符以外的任何字符(代替换行符的话用re.S);^:行开始;$:行结束;x*:x重复0次或多次;\s:空白字符;x+:x重复一次或者多次;*?:重复任意次,但尽可能少重复。
re.match():尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,就返回none。
泛匹配
import re
content='Hello 123 4567 world_This is a Regex Demo'
result=re.match('^Hello.*Demo$',content)
print(result)
print(result.group())
print(result.span())
匹配目标
content='Hello 1234567 world_This is a Regex Demo'
result=re.match('^Hello\s(\d+)\sworld.*Demo$',content)
print(result)
print(result.group(1))
print(result.span())
贪婪匹配
content='Hello 1234567 world_This is a Regex Demo'
result=re.match('^He.*(\d+).*Demo$',content)
print(result)
print(result.group(1))
print(result.span())
非贪婪匹配
content='Hello 1234567 world_This is a Regex Demo'
result=re.match('^He.*?(\d+).*Demo$',content)
print(result)
print(result.group(1))
print(result.span())
匹配模式
转义
content2="price is $10"
result=re.match(r"price is \$10",content2)
print(result)
小结:尽量使用泛匹配,使用括号得到匹配目标,尽量使用非贪婪模式,有换行符就使用re.S
re.search()扫描字符串,并返回第一个成功的匹配。
content="Extra stings Hello 1234567 world_This is a Regex Demo Extra stings "
result=re.search('He.*?(\d+).*?Demo',content)
print(result)print(result.group(1))
小结:为匹配方便,能使用search就不用match。
re.findall()搜索字符串,以列表的形式返回全部匹配的字符串
re.sub()替换字符串中每一个匹配的子串后返回替换后的字符串。
content="Extra stings Hello 1234567 world_This is a Regex Demo Extra stings "
result=re.sub('\d+','',content)
print(content)
content="Extra stings Hello 1234567 world_This is a Regex Demo Extra stings "
result=re.sub('\d+','Replacement',content)
print(content)
print(result)
result=re.sub('(\d+)',r'\1 8910',content)
print(result)
re.compile()将正则字符串编译为正则表达式对象