正则表达式
2019-04-30 本文已影响0人
空巷丨
正则表达式
字符匹配
符号 | 意义 | 使用 | 结果 | |
---|---|---|---|---|
"." | 匹配除换行符以外的任何字符 | re.findall('.','abcbcd') | ['a', 'b', 'c', 'b', 'c', 'd'] | |
"^" | 匹配字符串的开头 | re.findall('^a','abcbcd') | ['a'] | |
"$" | 匹配字符串末尾或字符串末尾换行符之前 | re.findall('d$','abcbcd') | ['d'] | |
"*" | 匹配前一个re的0个或多个(贪婪的)重复。贪婪意味着它将尽可能多的重复匹配 | re.findall('b*','abcbcd') | ['', 'b', '', 'b', '', '', ''] | |
"+" | 匹配前面的1次或多次(贪婪的)重复 | re.findall('bc+','abcbcd') | ['bc', 'bc'] | |
"?" | 匹配前面re的0或1(贪婪) | re.findall('bc?','abcbcd') | ['bc', 'bc'] | |
*?,+?,?? | 前三个特殊字符的非贪婪版本 | re.findall('b*?','abcbcd') re.findall('bc+?','abcbcd') re.findall('bc??','abcbcd') | ['', '', 'b', '', '', 'b', '', '', ''] ['bc', 'bc'] ['b', 'b'] | |
{m,n} | 从m到n的匹配重复前面的re | re.findall('bc{0,1}','abcbcd') | ['bc', 'bc'] | |
{m,n}? | 上面的非贪婪版本 | re.findall('bc{0,1}?','abcbcd') | ['b', 'b'] | |
"\" | 要么转义特殊字符,要么发出特殊序列的信号 | |||
[] | 表示一组字符,作为第一个字符的“^”表示补集 | re.findall('[bc]','abcbcd') re.findall('[^bc]','abcbcd') | ['b', 'c', 'b', 'c'] ['a', 'd'] | |
"|" | A B,创建一个与A或B匹配的RE | re.findall('b | c','abcbcd') | ['b', 'c', 'b', 'c'] |
(...) | 匹配括号内的re。可以在以后的字符串中检索或匹配内容 | re.findall('(bc)','abcbcd') | ['bc', 'bc'] | |
(?aiLmsux) | 设置RE的A、I、L、M、S、U或X标志(见下文) | |||
(?:...) | 常规括号的非分组版本 | re.findall('(?:bc)','abcbcd') | ['bc', 'bc'] | |
(?P<name>...) | 组匹配的子字符串可以通过名称访问 | re.findall('(?P<bc>...)','abcbcd') | ['abc', 'bcd'] | |
(?P=name) | 与前面名为name的组匹配的文本匹配 | |||
(?#...) | 注释;忽略 | re.findall('..(?#bc)','abcbcd') | ['ab', 'cb', 'cd'] | |
(?=...) | 匹配如果…匹配下一个,但不使用字符串 | re.findall('.(?=.)','abcbcd') | ['a', 'b', 'c', 'b', 'c'] | |
(?!...) | 匹配如果…不匹配下一个 | res = re.findall('.(?!.)','abcbcd') | ['d'] | |
(?<=...) | 如果前面有…(必须为固定长度) | re.findall('.(?<=bc)','abcbcd') | ['c', 'c'] | |
(?<!...) | 如果前面没有匹配…(必须为固定长度) | re.findall('.(?<!bc)','abcbcd') | ['a', 'b', 'b', 'd'] | |
(?(id/name)yes|no) | 匹配是模式如果ID/名称匹配的组,则为(可选)否模式,否则为 | |||
\number | 匹配同一号码组的内容 | |||
\A | 仅在字符串开头匹配 | re.findall('\A123','123123') | ['123'] | |
\Z | 仅在字符串末尾匹配 | re.findall('23\Z','123123') | ['23'] | |
\b | 匹配空字符串,但仅在单词的开头或结尾 | |||
\B | 匹配空字符串,但不在单词的开头或结尾 | |||
\d | 匹配任何十进制数字;相当于带有ASCII标志的集合[0-9]内字节模式或字符串模式 | re.findall('\d','123456') | ['1', '2', '3', '4', '5', '6'] | |
\D | 匹配任何非数字字符;相当于[^\d] | re.findall('\D','a123b') | ['a', 'b'] | |
\s | atches任何空白字符;相当于字节模式中的[\t\n\r\f\v]或带ASCII标志的字符串模式。在不带ASCII标志的字符串模式中,它将匹配整个Unicode空白字符范围。 | |||
\S | 匹配任何非空白字符;相当于[^\s] | |||
\w | 匹配任何字母数字字符;相当于字节模式中的[A-ZA-Z0-9 UUU]或带ASCII标志的字符串模式。在不带ASCII标志的字符串模式中,它将匹配Unicode字母数字字符(字母加数字加下划线)的范围。在区域设置中,它将匹配集[0-9 UUU]加上定义的字符。作为当前区域设置的字母。 | |||
\W | 匹配\w的补码 | |||
\|匹配文字反斜杠 |
方法使用
方法 | 使用场景 |
---|---|
match | 将正则表达式模式与字符串开头匹配 |
fullmatch | 完全匹配将正则表达式模式与所有字符串匹配 |
search | 在字符串中搜索是否存在模式 |
sub | 在字符串中替换出现的模式 |
subn | 与Sub相同,但也返回所做替换的数目 |
split | 按出现的模式拆分字符串 |
findall | 在字符串中查找模式的所有匹配项 |
finditer | 返回为每个匹配生成匹配对象的迭代器 |
compile | 将模式编译为模式对象 |
purge | 清除正则表达式缓存 |
escape | 反斜杠字符串中所有非字母数字 |
总结
==没有测试的我自己也没弄太清楚,正则表达式效率很高,比bs4等效率要高很多,所以学习爬虫需要学号正则表达式,欢迎各位评论,共同进步==