Regex 如何搜索并用<;替换反勾号;代码></代码>;标签?

Regex 如何搜索并用<;替换反勾号;代码></代码>;标签?,regex,visual-studio-code,sublimetext3,atom-editor,Regex,Visual Studio Code,Sublimetext3,Atom Editor,我有一个包含多个文本实例的大型文本文件,这些文本由3个背景符号括起: ``` Default: Publisher Bid Modifier Object with values=[] ``` <td> ``` Publisher Bid Modifier Object ``` </td> 如何使用VS Code(或类似)这样的文本编辑器进行搜索和替换?我在用MacBook 非常感谢 使用正则表达式: ```([^`]

我有一个包含多个文本实例的大型文本文件,这些文本由3个背景符号括起:

    ```
Default:
Publisher Bid Modifier Object with values=[]
    ```

   <td>

    ```
Publisher Bid Modifier Object
    ```

   </td>

如何使用VS Code(或类似)这样的文本编辑器进行搜索和替换?我在用MacBook

非常感谢

使用正则表达式:

```([^`]*)```
并将其替换为

<code>\1</code>
  • <代码><代码>和
    只是文本字符串,可以是任何东西
  • \1
    是搜索字符串中的第一个;此外,根据搜索内容,您还可以拥有
    \2
    \3

测试



但是,在更换之前或之后,让自己成为一个服务,并验证“标签”是否正确匹配。捕获偶数个不匹配项将非常困难。

我们将使用正则表达式查找并替换文本文件中的数据

正则表达式在某种形式的数据中搜索模式。数据可以是HTML文件、word文件(假设您知道如何提取文本),或者在您的情况下是普通文本文件。要实现正则表达式,需要使用特殊字符来表示模式的某些特性。findall函数采用以下形式:

re.findall(pattern,string)
例如,如果您想在文档中查找所有单词“stairway”,您可以编写

re.findall("staircase",text)
其中“楼梯”是模式,文本是字符串。程序将返回所有“楼梯”实例,作为输入文本中的数组。但是,如果你还想包括楼梯的大写版本,例如“楼梯”,假设它位于一个句子的开头,该怎么办?在本例中,您使用了我前面提到的特殊字符:您将编写以下模式

re.findall("(S|s)taircase",text)
|元字符表示左侧的内容或右侧的内容。还要注意如何使用括号将项目分组在一起,这在正则表达式中很常见。因此正则表达式搜索以下字符串之一:“楼梯”或“楼梯”。正则表达式中的其他一些重要元字符包括

“\w”匹配任何“word”字符,因此“a”、“b”、“C”和“D”都将与此元字符匹配

re.findall("(A|a)pple\d*",text)
“\W”匹配任何非单词字符,因此“1”、“2”、““>”、“?”和“=”都将与此元字符匹配

“\s”匹配任何空白字符

re.findall("(A|a)pple\d*",text)
“\S”匹配任何非空白字符

re.findall("(A|a)pple\d*",text)
“\d”匹配所有数字字符,0-9

“\D”匹配任何非数字字符

re.findall("(A|a)pple\d*",text)
除了前面的元字符之外,还有量词*,+,?,{n},{min,}和{min,max}。以下是这些元字符的简要说明:

“*”匹配上一个元素的零次或多次出现

“+”匹配上一个元素的一个或多个引用

“?”与上一个元素的零次或一次匹配

“{n}”正好匹配上一个元素的n次出现

“{min,}”至少与前一个元素的min次匹配

“{min,max}”匹配上一个元素(包括min和max)的最小和最大出现次数

为了给出一个我们到目前为止所讨论的例子,这里是一个使用分组、or符号、量词和元字符的模式示例

re.findall("(A|a)pple\d*",text)
正则表达式将找到以下所有子字符串:“Apple”、“Apple”、“Apple0”、“Apple0”、“Apple00”、“Apple00”等

现在我们已经完成了正则表达式的介绍,我们可以继续实际编写代码来使用Python解决您的问题

import re
textFile = open(pathToTextFile,"r")
rawText = textFile.read()
textFile.close()
tags = ["<code>","</code>"]
count = 0
output = ""
for line in rawText.split("\n"):
    if "```" in line:
        output+=re.sub("```",tags[count%2],line)+"\n"
        count+=1
    else:
        output+=line+"/n"
outFile = open(pathToOutFile,"w")
outFile.write(output)
outFile.close()
如果您的计算机上安装了Python,请打开IDLE并创建一个新文件。一个新窗口将打开。这是您编写命令的地方

我们需要做的第一件事是导入一个名为re的包,这是一个用于正则表达式的模块。然后加载文本文件(插入路径),读取其内容,然后关闭文本文件

接下来,我们定义一个名为tags的数组,该数组包含两个用于替换三个引号的标记、一个名为count的整数(用于确定要添加的标记)和一个空输出字符串

然后我们迭代rawText变量的每一行,每当我们看到三重引号时,我们就用一个标记替换,然后更新count变量。否则,我们只需添加该行并继续到for循环的下一个元素

最后,我们创建一个用于写入的新文件(插入路径),写入输出字符串,然后关闭该文件。我们完了!输出如下所示

    <code>
Default:
Publisher Bid Modifier Object with values=[]
    </code>

   <td>

    <code>
Publisher Bid Modifier Object
    </code>

   </td>

参考文献:

您可以使用Python编写程序。你想让我教你怎么做吗?我以前从未用过Python。如果你认为对我来说,站起来跑步是相当简单的,那就千方百计吧。谢谢好的,Python对于初学者来说是一种很棒的语言,因为它允许用户与其他语言不同的代码交互。您可以在这里下载Python的最新版本:谢谢Alex和virolino,我可能无法在第二天或第二天提供反馈。但是非常感谢您的回复!谢谢,维罗里诺,看起来很好用。而且为试驾提供的网站也非常有用。问题:你能解释一下“替代价值”吗?我可以在那里插入什么样的值?我添加到了答案中。完美!谢谢:)完成:)(抱歉-我对如何使用StackOverflow有点生疏:)嗨,Alex非常感谢您的输入。当我本周晚些时候有时间的时候,我会非常渴望试驾它。我将virolino的答案标记为正确,因为它更接近于我的要求——即搜索和替换(无需编写代码)。但是你的投入是非常值得赞赏的(你的方法也是一个可行的选择)。再次谢谢你,皮特