Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.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 string.replace等价物(来自Javascript)_Javascript_Python_Regex - Fatal编程技术网

Python string.replace等价物(来自Javascript)

Python string.replace等价物(来自Javascript),javascript,python,regex,Javascript,Python,Regex,我试图学习python,作为一个来自Javascript的人,我还不能真正理解python的正则表达式包re 我试图做的是用javascript构建一个非常简单的模板“引擎”(我知道AST是解决更复杂问题的方法): 在javascript中: var rawString = "{{prefix_HelloWorld}} testing this. {{_thiswillNotMatch}} \ {{prefix_Okay}}"; rawString.replace( /\

我试图学习python,作为一个来自Javascript的人,我还不能真正理解python的正则表达式包re

我试图做的是用javascript构建一个非常简单的模板“引擎”(我知道AST是解决更复杂问题的方法):

在javascript中:

var rawString = 
  "{{prefix_HelloWorld}}   testing this. {{_thiswillNotMatch}} \ 
  {{prefix_Okay}}";

rawString.replace(
   /\{\{prefix_(.+?)\}\}/g,
   function(match, innerCapture){
     return "One To Rule All";
});
在Javascript中,将导致:

“一对所有的测试规则。{{{u thiswillNotMatch}}一对一 规则所有“

该函数将被调用两次,方法是:

   innerCapture === "HelloWorld"
   match ==== "{{prefix_HelloWorld}}"
以及:

现在,在python中,我尝试在re包上查找文档

import re
我试着按照以下思路做一些事情:

match = re.search(r'pattern', string)
if match:
  print match.group()
  print match.group(1)
但这对我来说真的没有意义,也不起作用。首先,我不清楚这个group()概念是什么意思?我如何知道是否有匹配。组(n)。。。组(n+11000)


谢谢

Python的
re.sub
函数与JavaScript的
String.prototype.replace
类似:

import re

def replacer(match):
    return match.group(1).upper()

rawString = "{{prefix_HelloWorld}}   testing this. {{_thiswillNotMatch}} {{prefix_Okay}}"
result = re.sub(r'\{\{prefix_(.+?)\}\}', replacer, rawString)
结果是:

'HELLOWORLD   testing this. {{_thiswillNotMatch}} OKAY'

对于组,请注意替换函数如何接受
match
参数和
innerCapture
参数。第一个参数是
match.group(0)
。第二个是
match.group(1)

我认为您希望替换所有出现的{{prefix_*}},其中*基本上是任何东西。如果是这样的话,这段代码就很简单

 pattern = "\{\{prefix_.*?\}\}"
 re.sub(pattern, "One To Rule All", rawString)

干杯

如果您将多次使用相同的模式(例如在循环中),那么这会更好:

pattern = re.compile("\{\{prefix_.*?\}\}")
# ... later ...
pattern.sub("One To Rule All", rawString)

谢谢你,这很有道理。第2组、第3组等是什么?或者是未定义的组。@JohnTomson:
。组(n)
是第n个捕获组。
pattern = re.compile("\{\{prefix_.*?\}\}")
# ... later ...
pattern.sub("One To Rule All", rawString)