@ Can, @Benji и @ ΤΖΩΤΖΙΟΥ дают три отличных решения, и им интересно послушать, как быстро они соответствуют (вот для чего timeit
- забавные бессмысленные микротесты ;-). E.g.:
$ python -mtimeit -s'import re; r=re.compile(r"([^#]*)(#.*)?"); s="this is a line # and this is a comment"' 'm=r.match(s); g=m.group(1)'
100000 loops, best of 3: 2.02 usec per loop
против
$ python -mtimeit -s'import re; r=re.compile(r"^(.*?)(?:#|$)"); s="this is a line # and this is a comment"' 'm=r.match(s); g=m.group(1)'
100000 loops, best of 3: 4.19 usec per loop
против
$ python -mtimeit -s'import re; r=re.compile(r"(.*?)(#|$)"); s="this is a line # and this is a comment"' 'm=r.match(s); g=m.group(1)'
100000 loops, best of 3: 4.37 usec per loop
и победителем становится ... смесь шаблонов! -)
$ python -mtimeit -s'import re; r=re.compile(r"(.*?)(#.*)?"); s="this is a line # and this is a comment"' 'm=r.match(s); g=m.group(1)'
1000000 loops, best of 3: 1.73 usec per loop
Отказ от ответственности: конечно, если бы это было реальное тестирование производительности, и скорость действительно имела значение, можно было бы примерить множество различных и релевантных значений для s
, на тестах, выходящих за рамки такого микробенчмарка, и т. Д., И т. Д. Но я все же нахожу timeit
неиссякаемый источник веселья! -)