正则表达式
一般使用re模块
匹配单个字符
字符 | 功能 |
---|---|
. | 匹配任意一个字符(除了\n) |
[ ] | 匹配[ ]中列举的字符,连续的可以用-连接,如:[1-8] |
\d | 匹配数字,即0-9 |
\D | 匹配非数字 |
\s | 匹配空白,即空格、Tab |
\S | 匹配非空白 |
\w | 匹配单词字符,即a-z、A-Z、0-9、_ |
\W | 匹配非单词字符 |
例:
>>ret = re.match(r"速度与激情\d", "速度与激情5")
>>ret.group()
>速度与激情5
匹配多个字符
字符 | 功能 |
---|---|
* | 匹配前一个字符出现0次或者无限次,即可有可无 |
+ | 匹配前一个字符出现1次或者无限次,即至少1次 |
? | 匹配前一个字符出现1次或者0次,即要么有1次,要么没有 |
{m} | 匹配前一个字符出现m次 |
{m, n} | 匹配前一个字符出现m到n次 切记!逗号后面不要加空格!!! |
例:
import re
names = ["name1", "_name", "2_name", "__name__"]
for name in names:
ret = re.match("[a-zA-Z_]+[\w]*", name)
if ret:
print("变量名 %s 符合要求" % ret.group())
else:
print("变量名 %s 非法" % name)
>>变量名 name1 符合要求
变量名 _name 符合要求
变量名 2_name 非法
变量名 __name__ 符合要求
组合
*?:重复任意次,但尽可能少重复
例:
>>re.match(r"a.*?b", "acbacb")
>acb
+?:和上面一样,只不过至少重复一次
??:重复0次或1次,但尽可能少
例:
>>re.match(r"a.??b", "aaaacb")
>acb
匹配开头结尾
字符 | 功能 |
---|---|
^ | 匹配字符串开头 |
$ | 匹配字符串结尾 |
import re
def main():
names = ["age", "_age", "1age", "age1"