如何批量替换特定范围内的指定字符串?(正则表达式,txt,notepad++)

如何批量替换特定范围内的指定字符串?(正则表达式,txt,notepad++)

问题描述:

问题:有若干txt文件,每个txt文件内有如下类似字段:


A 。。.

..... 。 。 。

B 。.。.。.。.。.

C 。。。. ...。


##需求:

需要批量将A与B之间的所有的“。”改为“.”,A与B以外的部分保持不变。

上图例子变为:

A...

........

B 。.。.。.。.。.

C 。。。. ...。


网上搜索了很久,大概知道notepad++中使用正则表达式可以完成,但不知如何写。

大概思路是利用notepad的批量替换功能,将A和B作为定位词,直接替换A和B之间需要替换的部分,原始数据能保证定位词是唯一的。


求教!谢谢!

(?<=A[\s\S]*)。(?=[\s\S]*B)

C#写一个程序

void Main(string[] args)
{
string file1 = args[0];
string file2 = args[0];
var txt = System.IO.File.ReadAllText(file1);
        string patt = @"(?is)^[^A]+A(.*)B[^B]+$";
        string rep = txt;
        if (System.Text.RegularExpressions.Regex.IsMatch(txt, patt))
        {
            var mid = System.Text.RegularExpressions.Regex.Match(txt, patt).Groups[1].Value;
            mid = mid.Replace("。", ".");
            rep = System.Text.RegularExpressions.Regex.Replace(txt, @"(?is)(^[^A]+A).*(B[^B]+$)", "${1}" + mid + "${2}");
        }
System.IO.File.WriteAllText(file2, rep);
}

编译成exe,使用方式

ConsoleApplication.exe "x:\你的输入文件名.txt" "x:\你的输出文件名.txt"

采纳本回答,可以将编译好的程序直接给你。

打开替换面板,勾选正则表达式,

查找目标为:

(A[^。]*)。(.*?(?=B))

替换内容为:

\1.\2

不断点击替换,直到替换结束。

本来写个代码,几分钟就可以,非常灵活。

如果非要使用notepad++,按照上面的正则就可以(正则需要写对,查找模式选择【正则表达式】),图片说明

也可以试着使用下面的替换工具
图片说明