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

时间:2013-07-31 07:53:08

标签: javascript python regex

我正在尝试接收python并且作为来自Javascript的人我还没有真正理解python的regex包重新

我正在尝试做的是我在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中
  

“One To Rule All test this。{{_ thiswillNotMatch}} One To   规则全部“

该函数将被调用两次:

   innerCapture === "HelloWorld"
   match ==== "{{prefix_HelloWorld}}"

和:

   innerCapture === "Okay"
   match ==== "{{prefix_Okay}}"

现在,在python中我尝试在重新包装上查找文档

import re

尝试过按照以下方式做的事情:

match = re.search(r'pattern', string)
if match:
  print match.group()
  print match.group(1)

但它对我来说真的没有用,也没用。首先,我不清楚这个group()概念的含义是什么?我怎么知道是否有match.group(n)... group(n + 11000)?

谢谢!

3 个答案:

答案 0 :(得分:5)

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)

答案 1 :(得分:0)

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

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

干杯!

答案 2 :(得分:0)

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

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