从字符串中删除子字符串

Posted

技术标签:

【中文标题】从字符串中删除子字符串【英文标题】:Remove substring from a string 【发布时间】:2019-09-08 11:54:06 【问题描述】:

如何在for 和其他循环中从字符串中删除由变量传递的子字符串(需要延迟扩展)?

我找到了%%

@echo off
setlocal enableExtensions enableDelayedExpansion
cd /D "%~dp0"
set br=^


rem br;


set "v=1!br!2!br!3"
set v=%%v:%br%=%%
echo !v!

但它似乎不起作用,如果 v 变量在迭代之间发生变化(当 %..% 需要为 !..! 时),它将不起作用。

感谢任何帮助。

【问题讨论】:

【参考方案1】:

您找到了%%,但显然您并未找到所有必要的信息。首先,br 必须用作!br!%br% 不起作用。其次,%%var%% 表示法将与call 一起使用(强制进行第二层解析):

@echo off
setlocal enableExtensions enableDelayedExpansion
cd /D "%~dp0"
set br=^


rem br;

set "v=1!br!2!br!3"
call set "v=%%v:!br!=%%"
echo !v! (also: %v%)

【讨论】:

【参考方案2】:

您也可以在for 循环中使用echo| set /p =

@echo off
setlocal enableDelayedExpansion
cd /D "%~dp0"
set br=^


:# Above 2 lines must be empty.
set "v=1!br!2!br!3"
for %%i in (!v!) do echo| set /p =%%i

【讨论】:

重点是删除子字符串,/br 只是一个例子 删除子字符串和删除 lf/cr 是两个不同的东西。 [ /br | /cr/lf ] 是由 text==string 组成的字符,问题是“如何删除子字符串”【参考方案3】:

这里有一些Remarks 的附加示例:

@Echo Off
Rem Using delayed expansion is necessary for this task.
SetLocal EnableDelayedExpansion
Rem The two empty lines are necessary to set br to a new line.
Set br=^


Rem Use the variable named br to set a variable named v to a multiline value.
Set "v=1!br!2!br!3"
Rem You can output all variable names beginning with v with their values using the below command.
Set v
Rem You can output the value for the variable named v using the below command.
Echo !v!
Pause

如果你不能保证名为v的变量会有一个值:

为了防止倒数第四行输出Environment variable v not defined,请改用Set v 2>Nul

为了防止倒数第二行输出ECHO is off.,请改用Echo(!v!

要从名为v 的现有变量中删除字符串值!br! 的所有实例,您需要使用Call 语句来引入另一个解析级别:

Rem Expand the variable named v and substitute the string value of the variable named br with nothing.
Call Set "v=%%v:!br!=%%"
Rem You can output the new value for the variable named v using the below command.
Echo(!v!
Rem However as Delayed Expansion is no longer necessary, you could instead use.
Echo(%v%

【讨论】:

以上是关于从字符串中删除子字符串的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python 的字符串子序列内核和 SVM

华为OD机试真题Java实现判断字符串子序列真题+解题思路+代码(2022&2023)

2022华为机试真题 C++ 实现 字符串子序列II

如何更改python字符串子字符串信息

[在python中使用正则表达式搜索字符串子字符串

求字符串不同子串个数