评估正则表达式时Python和Javascript之间的区别

时间:2012-01-04 10:36:26

标签: javascript python regex

首先,这不是this question的愚蠢行为。

在Javascript中,这个表达式似乎被正确评估:

\\/(omniture|mbox|hbx|omniunih)(.*)?

如果我将它传递给Python re模块,就会发生不好的事情。实际上,以下内容会返回错误:

import re
re.compile (u'\\/(omniture|mbox|hbx|omniunih)(.*)?')

In [101]: re.compile (u'\\/(omniture|mbox|hbx|omniunih)(.*)?')
---------------------------------------------------------------------------
error                                     Traceback (most recent call last)
/home/fakk/spider.io/1/<ipython-input-101-b5b19eb3b66e> in <module>()
----> 1 re.compile (u'\\/(omniture|mbox|hbx|omniunih)(.*)?')

/usr/lib/python2.7/re.pyc in compile(pattern, flags)
    188 def compile(pattern, flags=0):
    189     "Compile a regular expression pattern, returning a pattern object."
--> 190     return _compile(pattern, flags)
    191 
    192 def purge():

/usr/lib/python2.7/re.pyc in _compile(*key)
    242         p = sre_compile.compile(pattern, flags)
    243     except error, v:
--> 244         raise error, v # invalid expression
    245     if len(_cache) >= _MAXCACHE:
    246         _cache.clear()

error: nothing to repeat

Python抱怨(.*)?部分,我自己无法理解。

我的问题是:

  1. (.*)?在JS中做了什么?匹配零或一个(?)零个或多个(*)字符(.)?有什么意义?
  2. 如何在Python中翻译它?

2 个答案:

答案 0 :(得分:6)

问号是多余的,因为你反思自己,它没有任何意义,删除它,你应该开展业务。

答案 1 :(得分:2)

你的正则表达式没有意义,你的字符串末尾的?不需要,实际上永远不会匹配任何东西。另外,我建议您使用r''让您的表达更容易阅读:

import re
my_regex = re.compile(r'\/(omniture|mbox|hbx|omniunih)(.*)')