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

如何将长正则表达式(RegEx)拆分为多行?

嘿,这个需求太常见了!把超长的正则拆成多行不仅能提升可读性,后续维护起来也方便太多。结合你用的Kotlin三重引号语法,有两种靠谱的方法:

方法1:字符串拼接拆分

直接把每个语言分支拆成单独的字符串片段,用+连接起来。这种方法完全保留原有正则的匹配逻辑,不需要调整模式:

val regEx = """(?i)""" +
    """(where|were|\bw)\s*(are|r)\s*(you|u)""" +
    """|(Dónde estás)""" +
    """|(Donde estas)""" +
    """|(Ku jeni ju)""" +
    """|(Non zaude)""" +
    """|(Дзе вы знаходзіцеся)""" +
    """|(Gdje si ti)""" +
    """|(Къде си)""" +
    """|(On ets)""" +  // 注意:原正则这里有个空格,确认是否是必要的匹配项
    """|(Gdje si)""" +
    """|(Kde jsi)""" +
    """|(Hvor er du)""" +
    """|(Waar ben je)""" +
    """|(Kus sa oled)""" +
    """|(Missä sinä olet)""" +
    """|(Où es tu)""" +
    """|(Onde estás)""" +
    """|(Wo bist du)""" +
    """|(Που είσαι)""" +
    """|(Merre jársz)""" +
    """|(Hvar ertu)""" +
    """|(Hvor er du)""" +
    """|(Gdzie jesteś)""" +
    """|(Onde está você)""" +
    """|(Unde esti)""" +
    """|(Где ты)""" +
    """|(Где си)""" +
    """|(Kde si)""" +
    """|(Kje si)""" +
    """|(Var är du)""" +
    """|(Де ти)""" +
    """|(Ble ydych chi)""" +
    """|(ווו זענען איר)""" +
    """|(Որտեղ...)"""

方法2:使用正则扩展模式(推荐)

利用正则的(?x)扩展模式(忽略空白和注释),配合Kotlin的trimMargin()去掉每行的缩进,这样不仅能换行,还能给每个分支加注释说明对应的语言,可读性拉满:

val regEx = """(?ix)
    # 英语变体
    (where|were|\bw)\s*(are|r)\s*(you|u)
    # 西班牙语(带/不带重音)
    |(Dónde estás)
    |(Donde estas)
    # 阿尔巴尼亚语
    |(Ku jeni ju)
    # 巴斯克语
    |(Non zaude)
    # 白俄罗斯语
    |(Дзе вы знаходзіцеся)
    # 克罗地亚语
    |(Gdje si ti)
    # 保加利亚语(西里尔字母)
    |(Къде си)
    # 加泰罗尼亚语
    |(On ets)
    # 波斯尼亚/克罗地亚/塞尔维亚语
    |(Gdje si)
    # 捷克语
    |(Kde jsi)
    # 丹麦语/挪威语
    |(Hvor er du)
    # 荷兰语
    |(Waar ben je)
    # 爱沙尼亚语
    |(Kus sa oled)
    # 芬兰语
    |(Missä sinä olet)
    # 法语
    |(Où es tu)
    # 欧洲葡萄牙语
    |(Onde estás)
    # 德语
    |(Wo bist du)
    # 希腊语
    |(Που είσαι)
    # 匈牙利语
    |(Merre jársz)
    # 冰岛语
    |(Hvar ertu)
    # 波兰语
    |(Gdzie jesteś)
    # 巴西葡萄牙语
    |(Onde está você)
    # 罗马尼亚语
    |(Unde esti)
    # 俄语
    |(Где ты)
    # 塞尔维亚语(西里尔字母)
    |(Где си)
    # 斯洛伐克语
    |(Kde si)
    # 斯洛文尼亚语
    |(Kje si)
    # 瑞典语
    |(Var är du)
    # 乌克兰语
    |(Де ти)
    # 威尔士语
    |(Ble ydych chi)
    # 意第绪语
    |(ווו זענען איר)
    # 亚美尼亚语(片段)
    |(Որտեղ...)
""".trimMargin()

小提醒:

  • (?ix)里的i是你原来的忽略大小写模式,x是新增的扩展模式,两者可以合并写。
  • 原正则里有些分支后面带了空格(比如(On ets) ),要确认这些空格是否是必须匹配的内容,如果是手误的话记得去掉,避免匹配错误。
  • trimMargin()会去掉每行开头的空白(默认是|,这里没用到所以直接去掉缩进),确保正则里的换行和缩进不会干扰匹配逻辑。

内容的提问来源于stack exchange,提问作者Hasan A Yousef

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:37:18