Python和Javascript在计算正则表达式方面的差异
首先,这不是一个骗局 在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)(.*)?') -----
\\/(omniture|mbox|hbx|omniunih)(.*)?
如果我将它传递给Pythonre
模块,坏事情就会发生。事实上,下面返回一个错误:
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中做什么?匹配零个或多个(*
)字符(
)中的零个或一个(?
)?重点是什么问号是多余的,因为你反映了你自己,它实际上没有任何意义,删除它,你应该投入工作。你的正则表达式没有意义,字符串末尾的
?
是不需要的,事实上,它永远不会匹配任何东西。此外,我建议您使用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_解析代码来找出问题的症结所在,但对于堆栈溢出问题,这需要付出一点努力;)