使用带有多个定界符的正则表达式(Java / Kotlin)分割文本

时间:2018-07-21 21:13:43

标签: java regex string kotlin

我有一个字符串行,其中代码(2个字符)和名称,以> 分隔。

例如CP >RENATO DE SACP >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

3 个答案:

答案 0 :(得分:3)

您可以使用此正则表达式( (?=[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

答案 1 :(得分:0)

您可以不使用正则表达式:

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

或(使用正则表达式)

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

答案 2 :(得分:0)

string.split("[÷+[-]]".toRegex()) 看这里我需要用 + ,div , - 分割字符串 你只需要将字符串转换为正则表达式 由于 - 是正则表达式中的特殊符号,我们需要将它包装起来

希望你也能以同样的方式解决你的问题