我正在尝试接收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)?
谢谢!
答案 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)