元字符:
^ $ [] {} () . \ ? * +
^ | 只能放在正则表达式的前方,且也只能从目标字符串的首部开始匹配 |
$ | 只能放在正则表达式的后方,且也只能从目标字符串的尾部开始匹配 |
[] | 字符集 |
{} | 匹配字符的长度范围,为一个闭区间 |
() | 其中字符串代表一个整体 |
. | 通配符,可以代表任意一个字符,除‘\n’ |
\ | 转义符,将有意义的字符变得没有意义,反之有意义 |
* | *前方的匹配字符的个数[0,+∞) |
+ | +前方的匹配字符的个数[1,+∞) |
? | ?前方的匹配字符的个数[0,1] |
[] 字符集
字符集中的元字符没有任何特殊意义,就是普通字符,但'\'和'^'字符和'-'在其中有着特殊意义
\ 转义符
\w | 代表任何字母和数字 |
\W | 代表任何非字母、数字 |
\s | 代表任何空白,\n、\t、\r、\f、\v |
\S | 代表任何非空白 |
\d | 代表任何数字 |
\D | 代表任何非数字 |
\b | 代表特殊符号,'空白'、'#'、'' |
\ | \本身代表着转义,可以让有意义的符号变得没意义,例如\\b,此时第二个\就变成了普通字符,当前正则表达式匹配的字符内容是\b |
^ 非符号
在[]中表示不包括后面的内容
- 范围符号
用法如a-z(表示a到z之间包括a、z的所有字母)、a-b、A-Z、0-9
{} 匹配长度
re.findall(r'abc{0}','abccbaabc')
# re.findall()为re的一个方法,用法是将匹配到的字符串分组
# 这里表示c最小匹配长度为0
# 结果为['ab','ab']
re.findall(r'abc{2}','abccbaabc')
# 结果为['abc']
re.findall(r'abc{0,2}','abccbaabc')
# 0为最小长度,2为最大长度
# 结果为['abcc', 'abc']
对于单独用的()和[]的个人见解(以下说法全部基于单独用的情况下,如r = r"(abc)*")
()中的字符将作为一个整体,不再为一个个体,这一点很重要!
re.findall(r'(abc)*','abcabcabc')
# 通常我们认为的结果是['abcabcabc']
# 但实则是['abc','']
re.findall(r'(abc)*','abc abc abc')
# ['abc', '', 'abc', '', 'abc', '']
# 我觉得是因为(abc)是一个整体了,导致匹配后abc完整字符后,这让程序认为已经找到了目标字符串从而会直接跳出循环,然后进行下一个组的匹配
# 我们想要正常匹配应该用[abc],字符集的表示让程序认为目标字符不在局限性为abc这个整体,后面可能还有更多的字符
re.findall(r'[abc]*','abcabcabc')
# 结果['abcabcabc',''],缺点就是这样能找到abccbacb这样的字符,[]的用法更像集合一样,用a,b,c,ac,ab,ac,abc这些子集去匹配字符
标签:字符,abc,匹配,正则表达式,re,代表,模块,findall From: https://www.cnblogs.com/lxshbes412/p/17765886.html