如何删除String字符串中两个指定字符之间的内容
如何删除String类型字符串中两个特定字符/字符序列之间的内容
你提到的参考场景如下:
原始字符串:
"Hello <>Remove this String<> how are you?"
期望处理结果:"Hello <><> how are you?"
实现方案
方案1:正则表达式替换(推荐,绝大多数编程语言通用)
这是最便捷的实现方式,核心思路是用非贪婪匹配定位两个分隔符中间的内容,替换时保留前后的分隔符即可。
针对示例中分隔符为<>的场景,匹配规则为(<>).*?(<>),替换值为两个捕获组的拼接即可,不同语言的捕获组引用语法略有差异,常见语言的代码示例如下:
- Java 代码示例
String originalStr = "Hello <>Remove this String<> how are you?"; // $1对应第一个捕获的<>, $2对应第二个捕获的<> String processedStr = originalStr.replaceAll("(<>)\\s*.*?(<>)", "$1$2");
- Python 代码示例
import re original_str = "Hello <>Remove this String<> how are you?" # \1对应第一个捕获的<>, \2对应第二个捕获的<> processed_str = re.sub(r'(<>).*?(<>)', r'\1\2', original_str)
- JavaScript 代码示例
const originalStr = "Hello <>Remove this String<> how are you?" // $1对应第一个捕获的<>, $2对应第二个捕获的<> const processedStr = originalStr.replace(/(<>)`.*?`(<>)`/g, '$1$2')
注意事项
- 如果你的分隔符是正则元字符(如
.、*、?、$、^等),需要在正则中添加转义符\,比如分隔符为$时,正则要写为(\\$).*?(\\$) - 非贪婪匹配
.*?可以保证多对分隔符场景下不会跨对删除内容,比如原始字符串为a<>b<>c<>d<>时,处理后会得到a<><>c<><>
方案2:手动遍历实现(适合分隔符逻辑特殊、正则无法匹配的场景)
如果分隔符存在动态变化、嵌套等特殊规则,可以自己遍历字符串处理,核心逻辑如下:
- 初始化结果字符串、分隔符匹配计数器、进入删除区间的标记位
- 逐字符遍历原始字符串,先判断当前位置是否匹配分隔符
- 第一次匹配到分隔符时,标记进入删除区间,先把分隔符拼接到结果中
- 处于删除区间内的字符直接跳过,直到第二次匹配到分隔符,标记退出删除区间,把第二个分隔符拼接到结果中
- 不在删除区间内的字符直接拼接到结果中即可
内容的提问来源于stack exchange,提问作者user16937037
相关产品推荐
相关产品推荐

