day18 正则表达式

时间:2022-12-15 17:00:22
正则表达式

  简单的范围的字符组
0-9 匹配所有的数字
a-z 匹配所有的小写字母
A-Z 匹配所有的大写字母
A-Za-z 匹配所有的字母

  字符     
      .        匹配换行符之外的任意字符
      \w word    匹配数字,字母,下划线
      \s space   匹配所有的空格符     
      \d digit   匹配数字
      \W  word    匹配非数字,字母,下划线
      \S space 匹配所有的非空格符
      \D digit 匹配非数字
      \n          匹配换行符
      \t tab 匹配制表符
       ^   startwith   匹配字符串的开始,位置永远在最前
      $ endswith 匹配字符串的结尾,位置永远在最后  
      ^ $        两个一起用可以约束中间的所有字符,但是要求全部完全匹配  
      | 或      从左向右,匹配上了就不匹配了,因此长的放在前面  
      ab|abc       先匹配ab,后面有abc也不会被选中
  
  量词:量词放在后面只约束前面一个的要求
 * 重复零次或更多次
+ 重复一次或更多次,重复一次得到的结果就是单字符。
 ? 重复零次或一次
  ? 如果放在量词后面表示非贪婪匹配,匹配最少(惰性匹配)
   默认是贪婪匹配,匹配到最多
   表示惰性匹配的时候会缓存后面一位表示结尾的指令。比如.*?x 表示取到x前面一个字符
  放在分组前面,取消分组优先
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次

   字符集
[] 匹配字符组中的字符
[^] 匹配除了字符组中字符的所有字符

  分组
() 对整体的式子进行量词约束
在split的时候分组会保留被分割的字符
在findall的时候,会优先匹配分组内的内容
若不想优先,可以使用(?:)取消分组优先级

转义字符
\ python 里面的转义字符用 r''

flags
  re.I(IGNORECASE)忽略大小写,括号内是完整的写法
  re.M(MULTILINE)多行模式,改变^和$的行为
  re.S(DOTALL)点可以匹配任意字符,包括换行符
  re.L(LOCALE)做本地化识别的匹配,表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境,不推荐使用
  re.U(UNICODE) 使用\w \W \s \S \d \D使用取决于unicode定义的字符属性。在python3中默认使用该flag
  re.X(VERBOSE)冗长模式,该模式下pattern字符串可以是多行的,忽略空白字符,并可以添加注释