以下正则表达式之间有什么区别.对我来说,他们都是一样的
[a-z][a-z]* VS [a-z]+[a-z][a-z]* VS [a-z]*[a-z]正如你所想,这些正则表达式完全相同.
[a-zA-Z] # exactly one alphabetic char
[a-zA-Z]* # 0 to infinite alphabetic chars
Run Code Online (Sandbox Code Playgroud)
与
[a-zA-Z]+ # 1 to infinite alphabetic chars
Run Code Online (Sandbox Code Playgroud)
一个只是1 + [0, \infinity] = [1, \infinity],另一个[1, \infinity].
#2的工作方式类似,在每种情况下你所做的只是重复字符的一个例子(在你的情况下,[a-zA-Z]重复的字符命令,*或+.
下面的答案指出,首选的可读性较高的版本是正确的目标.绝对没有任何理由这样做[a-zA-Z]*[a-zA-Z]或[a-zA-Z][a-zA-Z]*,因为ultimatley他们都只是[a-zA-Z]+.
一切都是一样的,只要你在正则表达式中连续重复两个相同的命令,你就会做错事.
$ python -m timeit -s "import re" "re.search(r'[a-zA-Z]*[a-
zA-Z]', '2323hfjfkf 23023493')"
1000000 loops, best of 3: 1.14 usec per loop
$ python -m timeit -s "import re" "re.search(r'[a-zA-Z]+',
'2323hfjfkf 23023493')"
1000000 loops, best of 3: 1 usec per loop
$ python -m timeit -s "import re" "re.search(r'[a-zA-Z][a-z
A-Z]*', '2323hfjfkf 23023493')"
1000000 loops, best of 3: 0.956 usec per loop
Run Code Online (Sandbox Code Playgroud)
事实证明,这[a-zA-Z][a-zA-Z]*比使用速度略快[a-zA-Z]+.我有点惊讶,但坦率地说,我认为可读性的损失不值得.05微秒的效率提升.
| 归档时间: |
|
| 查看次数: |
4811 次 |
| 最近记录: |