如何用 <code> </code> 标签搜索和替换反引号?

How can I search and replace backticks with <code> </code> tags?

我有一个大文本文件,其中包含多个用 3 个反引号括起来的文本实例:

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

   <td>

    ```
Publisher Bid Modifier Object
    ```

   </td>

我想用 <code> </code> 标签替换那些反引号,看起来像这样:

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

   <td>

    <code>
Publisher Bid Modifier Object
    </code>


   </td>

如何使用 VS Code(或类似工具)等文本编辑器进行搜索和替换?我正在使用 MacBook。

非常感谢!

使用正则表达式:

```([^`]*)```

并将其替换为

<code></code>
  • <code></code> 只是文本字符串,可以是任何内容;
  • </code> 是搜索字符串中的第一个 <a href="https://www.regular-expressions.info/refcapture.html" rel="nofollow noreferrer"><strong>capture group</strong></a>;此外,您还可以有 <code> ...,具体取决于您搜索的内容;

测试here.


但是,请自己做一个服务,并在替换之前或之后验证 "tags" 是否正确匹配。要捕获偶数个不匹配项将非常棘手。

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

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

re.findall(pattern,string)

例如,如果您想在文档中查找所有单词 "staircase",您可以编写

re.findall("staircase",text)

其中 "staircase" 是模式,文本是字符串。该程序会将 return "staircase" 的所有实例作为您用作输入的文本中的数组。但是,如果您还想包括大写版本的楼梯,即 "Staircase",假设它位于句子的开头怎么办?在这种情况下,您使用了我之前提到的特殊字符:您将改为编写以下模式

re.findall("(S|s)taircase",text)

的|元字符表示左边的内容或右边的内容。还要注意如何使用括号将项目组合在一起,这在正则表达式中很常见。因此正则表达式搜索以下任一字符串:"Staircase" 或 "staircase"。正则表达式中其他一些重要的元字符是

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

"\W" 匹配任何非单词字符,因此 "1"、"2"、">"、"?" 和 "=" 都将与该元字符匹配。

"\s" 匹配任何空白字符。

"\S" 匹配任何非空白字符。

"\d" 匹配所有数字字符,0-9。

"\D" 匹配任何非数字字符。

除了前面的元字符之外,还有量词 *、+、?、{n}、{min,} 和 {min, max}。以下是这些元字符的简要说明:

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

“+”匹配前一个元素的一次或多次出现。

“?”匹配前一个元素的零次或一次出现。

“{n}”恰好匹配前一个元素的 n 次出现。

"{min,}" 至少匹配前一个元素的最小出现次数。

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

下面是一个使用分组、或符号、量词和元字符的模式示例。

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 并创建一个新文件。将打开一个新的 window。这是您编写命令的地方。

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

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

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

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

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

   <td>

    <code>
Publisher Bid Modifier Object
    </code>

   </td>

参考文献:https://en.wikipedia.org/wiki/Regular_expression