如何批量替换特定范围内的指定字符串?(正则表达式,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++,按照上面的正则就可以(正则需要写对,查找模式选择【正则表达式】),
也可以试着使用下面的替换工具