python正则表达式中match的使用

有关正则表达式的常用符号可以参考https://blog.csdn.net/stickto11_/article/details/105808949

match()

向它传入要匹配的字符串以及正则表达式,就可以检测这个正则表达式是否匹配字符串。

最简单的用法如下:

import re

content="Hello 1234567 World_This is a Regex Demo"
result=re.match("^Hello\s(\d+)\sWorld",content)
print(result)
print(result.group())
print(result.group(1))
print(result.span())

#结果如下:
#<_sre .SRE_Match object; span=(O, 19), match =’ Hello 1234567 World ’>
#Hello 1234567 World
#1234567
#(0,19)
  • ^表示开始匹配的位置
  • \s表示匹配一个空格
  • \d+表示匹配多个数字
  • result.group(1)这个1就是指的括号中匹配的内容
  • 19计算方式为:H e l l o 空格 1 2 3 4 5 6 7 空格 W o r l d一共19个

下面讲解贪婪与非贪婪,只需要弄懂以下代码即可:

import re

content="Hello 1234567 World_This is a Regex Demo"
result1=re.match("^He.*(\d+).*Demo$",content)
result2=re.match("^He.*?(\d+).*Demo$",content)
result3=re.match("^He.*Regex\s(.*?)",content)
result4=re.match("^He.*Regex\s(.*)",content)
print(result1.group(1))
print(result2.group(1))
print(result3.group(1))
print(result4.group(1))

#结果如下
#7
#1234567
#(空)
#Demo
  • .*尽可能匹配多的, .*?尽可能匹配少的

修饰符

下面的代码会报错:

content='''Hello 1234567 World_This 
is a Regex Demo
'''
result=re.match("^He.*?(\d+).*Demo$",content)
print(result.group(1))

原因在于.*不能匹配换行符,修改方法如下:

result=re.match("^He.*?(\d+).*Demo$",content,re.S)

其他修饰符如下:
python正则表达式中match的使用_第1张图片

图片来源于《python3 网络爬虫开发实战》

注意:match()是从开头开始匹配,一旦开头不匹配,整个匹配就失败了。这时可以考虑另一个方法,search(),它在匹配时会扫描整个字符串,然后返回第一个成功匹配的结果。

你可能感兴趣的:(python,爬虫)