如何在Python中解析Javascript正则表达式?

如何在Python中解析Javascript正则表达式?,javascript,python,regex,Javascript,Python,Regex,首先,我不是编写regexp的人,所以我不能重写它们。我引入了几个Javascript正则表达式,并试图解析它们,但它们之间似乎有一些区别。在W3S上测试示例regexp时,Javascript显示: var str="Visit W3Schools"; var patt1=/w3schools/i; alert(str.match(patt1)) 提醒“学校”。但是,在Python中,我得到: import re str="Visit W3Schools" patt1=re.compile(

首先,我不是编写regexp的人,所以我不能重写它们。我引入了几个Javascript正则表达式,并试图解析它们,但它们之间似乎有一些区别。在W3S上测试示例regexp时,Javascript显示:

var str="Visit W3Schools";
var patt1=/w3schools/i;
alert(str.match(patt1))
提醒“学校”。但是,在Python中,我得到:

import re
str="Visit W3Schools"
patt1=re.compile(r"/w3schools/i")
print patt1.match(str)
打印
None
。 是否有一些库可用于将Javascript正则表达式转换为Python正则表达式?

在Python中,仅在字符串开头匹配

你想用的是

此外,不需要包含“/”字符,并且需要使用单独的参数重新编译以使搜索不区分大小写:

>>> import re
>>> str = "Visit W3Schools"
>>> patt1 = re.compile('w3schools', re.I)
>>> print patt1.search(str)
<_sre.SRE_Match object at 0x10088e1d0>
>>重新导入
>>>str=“参观学校”
>>>patt1=re.compile('w3schools',re.I)
>>>打印模式1.搜索(str)
在JavaScript中,斜杠相当于调用
re.compile

我可以推荐您阅读,甚至在python中,还有一个非常好的。

仅在字符串开头匹配

你想用的是

此外,不需要包含“/”字符,并且需要使用单独的参数重新编译以使搜索不区分大小写:

>>> import re
>>> str = "Visit W3Schools"
>>> patt1 = re.compile('w3schools', re.I)
>>> print patt1.search(str)
<_sre.SRE_Match object at 0x10088e1d0>
>>重新导入
>>>str=“参观学校”
>>>patt1=re.compile('w3schools',re.I)
>>>打印模式1.搜索(str)
在JavaScript中,斜杠相当于调用
re.compile


我可以推荐您阅读,甚至还有一个非常好的。

您不想在regexp中包含
/
字符和标志,您应该使用
.search
而不是
.match
进行子字符串匹配

尝试:


您不希望在regexp中包含
/
字符和标志,您应该使用
.search
而不是
.match
进行子字符串匹配

尝试:


可以编写一个小助手函数,这样/ig也可以工作:

def js_to_py_re(rx):
    query, params = rx[1:].rsplit('/', 1)
    if 'g' in params:
        obj = re.findall
    else:
        obj = re.search

    # May need to make flags= smarter, but just an example...    
    return lambda L: obj(query, L, flags=re.I if 'i' in params else 0)

print js_to_py_re('/o/i')('school')
# <_sre.SRE_Match object at 0x2d8fe68>

print js_to_py_re('/O/ig')('school')
# ['o', 'o']

print js_to_py_re('/O/g')('school')
# []
def js_to_py_re(rx):
查询,params=rx[1:].rsplit('/',1)
如果参数中的“g”:
obj=re.findall
其他:
obj=重新搜索
#可能需要使flags=更智能,但只是一个示例。。。
返回lambda L:obj(如果参数else 0中的'I',则查询,L,flags=re.I)
将js_打印到_py_re('/o/i')('school'))
# 
将js_打印到_py_re('/O/ig')('school'))
#['o','o']
将js_打印到_py_re('/O/g')('school'))
# []

可以编写一个小助手函数,这样/ig也可以工作:

def js_to_py_re(rx):
    query, params = rx[1:].rsplit('/', 1)
    if 'g' in params:
        obj = re.findall
    else:
        obj = re.search

    # May need to make flags= smarter, but just an example...    
    return lambda L: obj(query, L, flags=re.I if 'i' in params else 0)

print js_to_py_re('/o/i')('school')
# <_sre.SRE_Match object at 0x2d8fe68>

print js_to_py_re('/O/ig')('school')
# ['o', 'o']

print js_to_py_re('/O/g')('school')
# []
def js_to_py_re(rx):
查询,params=rx[1:].rsplit('/',1)
如果参数中的“g”:
obj=re.findall
其他:
obj=重新搜索
#可能需要使flags=更智能,但只是一个示例。。。
返回lambda L:obj(如果参数else 0中的'I',则查询,L,flags=re.I)
将js_打印到_py_re('/o/i')('school'))
# 
将js_打印到_py_re('/O/ig')('school'))
#['o','o']
将js_打印到_py_re('/O/g')('school'))
# []

Look up
.match
vs.
.search
。Look up
.match
vs.
.search
。这不适用于具有命名组的正则表达式。不幸的是,命名组的JS样式与Python中的JS样式不同。@RJH不确定我是否遵循此样式-您能提供一个示例说明它在哪里不起作用吗?这不适用于具有命名组的正则表达式。不幸的是,命名组的JS样式与Python中的JS样式不同。@RJH不确定我的理解是什么-你能举个例子说明它在哪里不起作用吗?