【python爬虫专题】解析方法 <3> 正则表达式学习

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hiha_hero2333/article/details/78897411

本篇学习记录主要来自《正则表达式必知必会》以及百度百科,作为本人学习爬虫的一个工具,将记录一些语法类的知识方便自己需要时复习


# 正则表达式是字符串处理的一种逻辑公式,不是python独有的,在python标准库中就带有re(regular expression)

书写匹配模式的语法:

元字符介绍

  • \
做转义字符时使用。
  • ^
从输入文字的行首进行匹配,如 ^[Aa] 匹配 “absorb”的 a
  • $
从输入文字的行尾进行匹配,跟在子表达式的尾部。如 [Bb]\$ 匹配“absorb” 的 末尾 b
  • *
匹配前面的子表达式(注意单个字符是一种纯文本表达式)0次至任意多次。* 等价于o{0,}   例如,zo*能匹配“z”,也能匹配“zo”以及“zoooo”。
  • +
  匹配前面的子表达式一次或多次(大于等于1次)。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}
  • ?
  匹配前面的(子表达式)01次,等价于{0,1}。例如,“do(es)?”可以匹配“do”或“does”。

  当?紧跟在任何一个其他限制符如(*,+,?,{n}{n,}{n,m})后面时,表示匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串。默认的贪婪模式则表示尽可能多的匹配所搜索的字符串。
  例如,对于字符串“oooo”,“o+”将尽可能多的匹配“o”,得到结果[“oooo”],而“o+?”将尽可能少的匹配“o”,得到结果 ['o', 'o', 'o', 'o']
  • x|yz
匹配x或yz(注意这里是把'|' 符号两边分别作为一个整体判断了)。例如,“z|food”能匹配“z”或“food”
- [xyz]
字符集合。匹配所包含的任意  '一个'  字符。例如,“[abc]”可以匹配“plain”中的“a”。
  • [^xyz]
不要的字符集合。匹配括号中不包含的任意 ' 一个' 字符。例如,“[^abc]”可以匹配“plain”中的  p 、l 、i 、n 。
  • \b
匹配一个单词边界。例如,文本“cas  as  asc" 中,“/bas/b”只能匹配第二个as, “/bas”可以匹配as, asc中的as
  • \B
匹配非单词边界。“er\B”能匹配“verb”中的“er”,但不能匹配“never”中的“er”。
  • \d
匹配一个数字字符。等价于[0-9]
  • \D
匹配一个非数字字符。等价于[^0-9]。`
  • \s
匹配任何不可见字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]
  • \S
匹配任何可见字符。等价于[^ \f\n\r\t\v]
  • \w
匹配包括下划线的任何单词字符。类似但不等价于“[A-Za-z0-9_]”,这里的"单词"字符使用Unicode字符集。
  • \W
匹配任何非单词字符。等价于“[^A-Za-z0-9_]”。
  • {n}
n为≥0的整数,匹配确定的n次。例如,“o{2}”不能匹配“pop”中的“o”,但是能匹配“shoot”中的两个o
  • {n,}
n是≥0的整数。至少匹配n次。`“o{1,}”等价于“o+”。“o{0,}”则等价于“o*”。例如,“o{2,}”不能匹配“pop”中的“o”,但能匹配“ooooops”中的所有o。`
  • {n,m}
`m和n都是≥0的整数,其中n<=m。表示最少匹配n次且最多匹配m次。`
例如,“o{1,3}”将匹配“poooooop”中的前三个o为一组,后三个o为一组。注意在逗号和两个数之间不能有空格。
  • ( pattern)
用于表示子表达式,匹配
括号中的pattern并获取这一匹配。若需要匹配圆括号字符的时候,使用转义“\(”或“\)
  • (?:pattern)
非获取的匹配,匹配pattern但不获取这个匹配结果,不进行存储并使用。这在使用或字符“(|)”来组合一个模式的各个部分时很有用。如 “industr(?:y|ies)”就是一个比“industry|industries”更简略的表达式。
  • (?=pattern)
  非获取匹配,在所有匹配pattern的文本 开始处  匹配查找字符串,但不需要获取。如“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”,也不匹配“SWindows”。
  • (?!pattern)
非获取匹配,在任何不匹配pattern的字符串  开始处  匹配查找字符串,匹配不需要获取。例如“Windows(?!95|98|NT|2000)”能匹配“Windows3.1”中的“Windows”,也能匹配sWindows,但不能匹配“Windows2000”中的“Windows”。
  • (?<=pattern)
非获取匹配,匹配的时候从字符串  结尾处  进行匹配,例如,“(<=95|98|NT|2000)Windows”能匹配“2000Windows”中的“Windows”,不能匹配“3.1Windows”中的“Windows”。
  • (?< !pattern)
非获取匹配,也是从字符串   结尾处  匹配,例如“(?<!95|98|NT|2000)Windows”能匹配“3.1Windows”中的“Windows”,但不能匹配“2000Windows”中的“Windows”。

常用正则表达式:
最全的常用正则表达式大全——包括校验数字、字符、一些特殊的需求等等

正则表达式除了“搜索匹配”, 还有“替换” 的功能,具体可以查看官方文档re.sub方法,比较容易

猜你喜欢

转载自blog.csdn.net/hiha_hero2333/article/details/78897411