Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python和Javascript在计算正则表达式方面的差异_Javascript_Python_Regex - Fatal编程技术网

Python和Javascript在计算正则表达式方面的差异

Python和Javascript在计算正则表达式方面的差异,javascript,python,regex,Javascript,Python,Regex,首先,这不是一个骗局 在Javascript中,此表达式的计算结果似乎正确: \\/(omniture|mbox|hbx|omniunih)(.*)? 如果我将它传递给Pythonre模块,坏事情就会发生。事实上,下面返回一个错误: import re re.compile (u'\\/(omniture|mbox|hbx|omniunih)(.*)?') In [101]: re.compile (u'\\/(omniture|mbox|hbx|omniunih)(.*)?') -----

首先,这不是一个骗局

在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
重新导入
重新编译(u'\/(omniture | mbox | hbx | omniunih)(.*))
在[101]中:重新编译(u'\\/(omniture | mbox | hbx | omniunih)(.*))
---------------------------------------------------------------------------
错误回溯(最近一次呼叫上次)
/home/fakk/spider.io/1/in()
---->1重新编译(u'\\/(omniture | mbox | hbx | omniunih)(*))
/编译中的usr/lib/python2.7/re.pyc(模式、标志)
188 def编译(模式,标志=0):
189“编译正则表达式模式,返回模式对象。”
-->190返回编译(模式、标志)
191
192 def purge():
/usr/lib/python2.7/re.pyc in_compile(*键)
242 p=sre_compile.compile(模式、标志)
243除错误外,v:
-->244 raise错误,v#无效表达式
245如果len(\u cache)>=\u MAXCACHE:
246_cache.clear()
错误:无需重复
Python抱怨
(.*)
部分,我自己也无法理解

我的问题是:

  • (.*)
    在JS中做什么?匹配零个或多个(
    *
    )字符(
    )中的零个或一个(
    )?重点是什么
  • 我如何用Python翻译它

  • 问号是多余的,因为你反映了你自己,它实际上没有任何意义,删除它,你应该投入工作。

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

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

    “Python抱怨(.*)部分”-您能发布错误消息吗?(我猜是“错误:没什么可重复的”,对吧?)你说得对:)事实上,没有什么可重复的。其他失败的表达式有:
    \/webtrends(.*)\.js
    预见-(触发器(.*)活动(.*))\.js
    everestjs\.net([0-9]*)?\.everestech\.net
    (.*)
    这个
    代表任何字符,
    *
    意味着可以有和以前一样多的字符(在本例中为任意字符)如您所愿,括号表示其中的内容是组,而
    表示前面的内容可以存在,但不能存在(在本例中,括号中的所有内容都不能存在)只是想澄清一下,这是多余的,但并不是完全不正确的,比较一下这个
    ?*
    。Python不能处理它有点奇怪。实际上这里有比
    多余更微妙的事情。这也是多余的
    (.?)?
    ,但python似乎并不介意。我试图通过查看sre_编译/sre_解析代码来找出问题的症结所在,但对于堆栈溢出问题,这需要付出一点努力;)