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 等效项

批处理选择命令的 Python 等效项

给定 wget 命令的 Python 等效项

python 的 help() 和 dir() 函数的 C 等效项是啥?

python中用于定义全局变量的空等效项[重复]

Python 中的 C# Parallel.Foreach 等效项