替换从字符开始并以另一个字符结束的文本文件中的子字符串

Posted

技术标签:

【中文标题】替换从字符开始并以另一个字符结束的文本文件中的子字符串【英文标题】:Replace substring inside a text file starting from character and ending with another character 【发布时间】:2020-02-29 03:04:29 【问题描述】:

我是使用批处理脚本的新手,我遇到了这个问题: 我尝试替换文件中的特定字符串,以特定于字符的@ 开头并以, 结尾

这是我的代码,它只是从 csv 中提取一组数据:

@echo off
D:
cd TEST 
(for /f "tokens=6,13,14 delims=|" %%a in (11_02_19_09.csv) do %%a,%%b,%c) > FROM_IMPORT.csv 
setlocal enabledelayedexpansion 
set in=FROM_IMPORT.csv 
set out=TO_IMPORT.csv 
for /f "tokens=*" %%a in ('type %in%') do ( set line=%%a >>%out% echo !line: =! )

输出是一组类似RMT,15018@10.71,TEST 的行,我搜索的内容是删除从@ 开始并以, 结尾的字符串

示例:如果有这样的东西 RMT,15018@10.71,TEST 我想得到这样的东西:RMT,15018,TEST

【问题讨论】:

是的,有可能。 谢谢,你知道怎么做吗? 你试过什么,你卡在哪里了?请分享您的编码尝试minimal reproducible example!请注意,这不是一个教程站点,而是一个询问特定于编程问题的地方。请参加tour,访问help center,并在此处了解How to Ask! 谢谢,这是我的代码,它只是从 csv 中提取一组数据: D: cd TEST (for /f "tokens=6,13,14 delims=|" %%a in (11_02_19_09.csv) do %%a,%%​​b,%c) > FROM_IMPORT.csv @echo off & setlocal enabledelayedexpansion set in=FROM_IMPORT.csv set out=TO_IMPORT.csv for /f "tokens=*" %%a in ('type %in%') do ( set line=%%a >>%out% echo !line: =! ) 输出是一组像这样的 RMT,15018@10.71,TEST 我搜索的行, 正在删除从 @ 开始并以, 结尾的字符串。我希望这可以帮助,提前谢谢 请edit你的问题发布代码,不要评论! 【参考方案1】:

试试这段代码,它在 vbscript 中使用正则表达式来搜索模式并替换它。 Demo Here

@echo off
Title Replace String using Regex with vbscript
Set "InputFile=in.csv"
Set "OutPutFile=out.csv"
Call :Search_Replace "%InputFile%" "%OutPutFile%"
Start /MAX Notepad "%OutputFile%" & Exit
::-----------------------------------------------------------------------------------
:Search_Replace <InputFile> <OutPutFile>
(
    echo WScript.StdOut.WriteLine Search_Replace(Data^)
    echo Function Search_Replace(Data^)
    echo Dim strPattern, strReplace, strResult,oRegExp
    echo Data = "%~1" 
    echo Data = WScript.StdIn.ReadAll
    echo strPattern = "\b@\S+?,\b"
    echo strReplace = ","
    echo Set oRegExp = New RegExp
    echo oRegExp.Global = True 
    echo oRegExp.IgnoreCase = True 
    echo oRegExp.Pattern = strPattern
    echo strResult = oRegExp.Replace(Data,strReplace^)
    echo Search_Replace = strResult
    echo End Function
)>"%tmp%\%~n0.vbs"
cscript //nologo "%tmp%\%~n0.vbs" < "%~1" > "%~2"
If Exist "%tmp%\%~n0.vbs" Del "%tmp%\%~n0.vbs"
Exit /B
::----------------------------------------------------------------------------------

【讨论】:

以上是关于替换从字符开始并以另一个字符结束的文本文件中的子字符串的主要内容,如果未能解决你的问题,请参考以下文章

1.java编程将从键盘输入文本中的子字符串“word”替换为字符串“world”,并删除所有的子字符串“this”

替换 Objective-C 中出现的字符串

如何在以特定单词开头并以另一个单词结尾的字符串中出现多次[重复]

正则表达式语法

字符串替换 (replace)

替换字符串列表中的子字符串