代码之家  ›  专栏  ›  技术社区  ›  betorcs

使用带有多个分隔符的regex(Java/Kotlin)拆分文本

  •  1
  • betorcs  · 技术社区  · 6 年前

    我和 代码 (2个字符)和 名称 以分隔 > 是的。

    如。 CP >RENATO DE SA 我是说, CP >FRAIS 是的。我想把这一排分成两排 代码 名称 是的。

    我有这段文字:

    CT >RUSSO CT >JOSE AQUINO CP >RENATO DE SA CP >FRAIS CF >TAMARA STUCCHI CF >VANESSA JULKOWS CM >CRISTINA LOUSTA CM >HANS KROESCHEL CM >CONCEICAO MACIE CM >AIMEE FRARI CM >JONNY MOREIRA
    

    预期结果:

    CT, RUSSO 
    CT, JOSE AQUINO 
    CP, RENATO DE SA 
    CP, FRAIS 
    CF, TAMARA STUCCHI 
    CF, VANESSA JULKOWS 
    CM, CRISTINA LOUSTA 
    CM, HANS KROESCHEL 
    CM, CONCEICAO MACIE 
    CM, AIMEE FRARI 
    CM, JONNY MOREIRA
    
    2 回复  |  直到 6 年前
        1
  •  3
  •   Youcef LAIDANI    6 年前

    你可以用这个正则表达式拆分 ( (?=[A-Z]{2} >)| >)

    import java.util.*
    
    fun main(args: Array<String>) {
        val input = "CT >RUSSO CT >JOSE AQUINO CP >RENATO DE SA CP >FRAIS ...";
        val split = input.split("( (?=[A-Z]{2} >)| >)".toRegex())
        for (i in split.indices step 2) 
           println(split[i] + ", " + split[i + 1])
    }
    

    输出

    CT, RUSSO
    CT, JOSE AQUINO
    CP, RENATO DE SA
    CP, FRAIS
    CF, TAMARA STUCCHI
    CF, VANESSA JULKOWS
    CM, CRISTINA LOUSTA
    CM, HANS KROESCHEL
    CM, CONCEICAO MACIE
    CM, AIMEE FRARI
    CM, JONNY MOREIRA
    

    你可以检查一下 ideone demo

    正则表达式详细信息:

    正则表达式将匹配两件事 ( (?=[a-z]{2}>)>)

    • (?=[A-Z]{2} > 空格后跟两个大写字母,然后是空格,然后是 > 签字,但我们需要上面两个字母 ?= 积极的展望
    • |
    • > 后跟 > 签名

    你可以检查 regex demo here

        2
  •  0
  •   ACV    6 年前

    您可以不使用regex:

    replace(" >", ", ").replace(" ","\\n");

    或(使用regex)

    replaceAll("\\s>", ", ").replaceAll("\\s","\\n");