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

时间:2019-10-11 07:46:29

标签: regex visual-studio-code sublimetext3 atom-editor

我有一个大型文本文件,其中包含多个文本实例,并用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。

非常感谢!

2 个答案:

答案 0 :(得分:1)

使用正则表达式:

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

并替换为

<code>\1</code>
  • <code></code>只是文本字符串,可以是任何内容;
  • \1是搜索字符串中的第一个capture group;另外,您可以根据自己的搜索对象来选择\2\3 ...

测试here


但是,在更换之前或之后,请自行维修并确认“标签”是否正确匹配。要捕获偶数个不匹配项将非常棘手。

答案 1 :(得分:1)

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

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

re.findall(pattern,string)

例如,如果要在文档中查找所有单词“ staircase”,则可以编写

re.findall("staircase",text)

其中“楼梯”是样式,文本是字符串。该程序将在您用作输入的文本中以数组的形式返回“楼梯”的所有实例。但是,如果您还想包含楼梯的大写形式,即“楼梯”,又以例如句子开头为例,该怎么办?在这种情况下,您使用的是我之前提到的特殊字符:您应该改写以下模式

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

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

“ \ w”与任何“单词”字符匹配,因此“ 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并创建一个新文件。将打开一个新窗口。在这里编写命令。

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

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

然后,我们在rawText变量的每一行上进行迭代,每当我们看到三引号时,我们都用一个标记替换,然后更新count变量。否则,我们只需添加该行,然后移至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;