如何在Python中解析Javascript正则表达式?
首先,我不是编写regexp的人,所以我不能重写它们。我引入了几个Javascript正则表达式,并试图解析它们,但它们之间似乎有一些区别。在W3S上测试示例regexp时,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(
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不确定我的理解是什么-你能举个例子说明它在哪里不起作用吗?