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

时间:2012-06-27 16:18:12

标签: javascript python regex

首先,我不是正在编写正则表达式的人,因此我不能只重写它们。我正在使用几个Javascript regexp,并尝试解析它们,但它们之间似乎存在一些差异。在W3Schools上测试示例regexp,Javascript显示了这一点:

var str="Visit W3Schools";
var patt1=/w3schools/i;
alert(str.match(patt1))

警告“W3Schools”。但是,在Python中,我得到:

import re
str="Visit W3Schools"
patt1=re.compile(r"/w3schools/i")
print patt1.match(str)

打印None。 是否有一些库可用于将Javascript正则表达式转换为Python版?

3 个答案:

答案 0 :(得分:3)

在python .match中,只匹配字符串开头的

您想要使用的是.search

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

>>> import re
>>> str = "Visit W3Schools"
>>> patt1 = re.compile('w3schools', re.I)
>>> print patt1.search(str)
<_sre.SRE_Match object at 0x10088e1d0>

在JavaScript中,斜杠相当于调用re.compile

我建议您阅读python regular expression module,甚至还有一个很棒的HOWTO

答案 1 :(得分:1)

您不希望在正则表达式中包含/字符和标记,并且您应该使用.search而不是.match进行子字符串匹配。

尝试:

patt1 = re.compile(r"w3schools", flags=re.IGNORECASE)
srch = patt1.search(str)
print srch.group()

答案 2 :(得分:1)

可以编写一个小帮助函数,这样/ 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')
# []