Python string.replace 等效项(来自 Javascript)
Posted
技术标签:
【中文标题】Python string.replace 等效项(来自 Javascript)【英文标题】:Python string.replace equivalent (from Javascript) 【发布时间】:2013-07-31 15:22:23 【问题描述】:我正在尝试学习 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 中会导致:
"One To Rule All 测试这个。_thiswillNotMatch One To 统治一切”
该函数将被调用两次:
innerCapture === "HelloWorld"
match ==== "prefix_HelloWorld"
和:
innerCapture === "Okay"
match ==== "prefix_Okay"
现在,在 python 中,我尝试在 re 包上查找文档
import re
尝试过以下方式:
match = re.search(r'pattern', string)
if match:
print match.group()
print match.group(1)
但这对我来说真的没有意义,也不起作用。一方面,我不清楚这个 group() 概念是什么意思?以及如何知道是否存在 match.group(n)... group(n+11000)?
谢谢!
【问题讨论】:
【参考方案1】: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)
。
【讨论】:
谢谢你,这很有意义。第 2 组、第 3 组等会是什么?或者那些没有定义。 @JohnTomson:.group(n)
是第 n 个捕获组。【参考方案2】:
我认为您想替换所有出现的 prefix_* ,其中 * 基本上是任何东西。如果是这样,则此代码有效并且很简单。
pattern = "\\prefix_.*?\\"
re.sub(pattern, "One To Rule All", rawString)
干杯!
【讨论】:
【参考方案3】:如果您将多次使用相同的模式(例如在循环中),那么这样会更好:
pattern = re.compile("\\prefix_.*?\\")
# ... later ...
pattern.sub("One To Rule All", rawString)
【讨论】:
以上是关于Python string.replace 等效项(来自 Javascript)的主要内容,如果未能解决你的问题,请参考以下文章
C# 中是不是有 .isConnected 功能的 python 等效项