通配符在Linux中遇见的比较多,CSS里面也有,而正则表达式范围就更广了,相比于通配符也更复杂,这两者中使用了一些相同的符号来实现匹配,但是同样的符号意义却不一样,在Python中通配符和正则也处于不同的模块中.
正则表达式
正则的概念也不用我多说,基本每个程序员都会使用到,我说说这里面几个和通配符一样的符号,并对他们的意义作出区别,使用markdown有些符号不能单独打出,我居然发现这里面还可以使用转义字符,神奇.
*:匹配前面的子表达式0次或者n次(n∈(0,∞)),属于贪婪匹配,例如fo*,能匹配到fo,foo等,等同于fo{0,}
?:匹配前面的子表达式0次或者1次,例如li(ke)?,能匹配到li,like,等同于{0,1}
[]:匹配一个指定范围的字符,例如[ab]cd,可以匹配到acd,bcd
{}:指定匹配子表达式的个数,有三种形式{n},{n,},{n,m}.
python中使用正则表达式需要导入的模块是re
1 | import re |
通配符
通配符一般在shell中使用,功能和正则表达式相比要弱很多,一般只用于文件名匹配,匹配方法有点介于简单的字符串方法和全功能的正则表达式之间.
可以在简单的数据处理中使用,注意区别符号的含义
*:星号代替0个,单个,多个字符,可以单独使用,例如*.py,可以匹配到所有后缀为.py的文件.
?:问号代替一个字符,可以单独使用,例如typor?,可以匹配到typora等文件.
python中要使用通配符需要导入的模块是fnmatch
1 | from fnmatch import fnmatchcase |
1 | True |
通过比较可以看出,正则中的*和?是无法单独存在,必须和子表达式同时出现作为一个匹配的规则,而通配符中的*和?是可以单独存在的代替一个或多个字符.