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