You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确分割包含"_"(含双"_")的字符串?

嘿,我懂你碰到的这个麻烦——处理带单下划线甚至双下划线的字符串分割时,普通的分割方法往往会给出乱七八糟的结果,比如冒出一堆空字符串,完全不是你想要的样子。我给你整理了几个常用编程语言的解决方案,针对性解决这个问题:

Python 解决方案

如果你的需求是把连续的下划线(不管单/双)当作一个分隔符,同时可以忽略字符串首尾可能出现的下划线,用正则表达式的 re.split() 就非常靠谱:

import re

# 示例字符串
s = "hello__world_python__foo"
# 分割连续的下划线
result = re.split(r'_+', s)
# 要是字符串首尾有下划线,会产生空元素,过滤掉即可
clean_result = [part for part in result if part]

print(clean_result)  # 输出: ['hello', 'world', 'python', 'foo']

这里的 r'_+' 表示匹配一个或多个连续的下划线,不管是单条还是双条下划线,都会被当作一个分隔符,自然不会产生多余的空元素。

JavaScript 解决方案

JS里有两种简单的处理方式,都能解决问题:

const s = "hello__world_python__foo";

// 方法1:用正则匹配连续下划线直接分割
const result1 = s.split(/_+/);

// 方法2:先按单个下划线分割,再过滤掉空元素
const result2 = s.split('_').filter(part => part.length > 0);

console.log(result1); // 输出: ['hello', 'world', 'python', 'foo']
console.log(result2); // 同样输出正确结果

两种方法都能避开连续下划线带来的空元素问题,你可以根据自己的习惯选。

Java 解决方案

Java里可以用原生正则,也可以借助工具类简化操作:

import java.util.ArrayList;
import java.util.List;

public class SplitExample {
    public static void main(String[] args) {
        String s = "hello__world_python__foo";
        
        // 原生正则方式:匹配连续下划线分割
        String[] result1 = s.split("_+");
        
        // 手动过滤空元素(应对首尾有下划线的情况)
        List<String> partList = new ArrayList<>();
        for (String part : s.split("_")) {
            if (!part.isEmpty()) {
                partList.add(part);
            }
        }
        String[] result2 = partList.toArray(new String[0]);
        
        // 借助Apache Commons Lang的StringUtils(更简洁)
        // 需要先引入依赖:org.apache.commons:commons-lang3
        String[] result3 = org.apache.commons.lang3.StringUtils.split(s, '_');
        // StringUtils.split会自动忽略连续分隔符,也不会保留空元素
    }
}

如果你的需求不是把连续下划线当成分隔符,而是有其他特殊要求(比如只分割单下划线,保留双下划线作为内容的一部分),可以再补充细节,我再给你调整方案~

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:17:47