gpt4 book ai didi

java - 将字符串拆分为不同部分的正则表达式(使用 Java)

转载 作者:行者123 更新时间:2023-12-02 06:43:53 25 4
gpt4 key购买 nike

我正在寻找一个正则表达式来分割以下字符串

red 12478
blue 25 12375
blue 25, 12364

这应该给出

Keywords red, ID 12478
Keywords blue 25, ID 12475
Keywords blue IDs 25, 12364

每行有 2 个部分,一组关键字和一组 ID。关键字以空格分隔,ID 以逗号分隔。

我想出了以下正则表达式:\s*((\S+\s+)+?)([\d\s,]+)

但是,第二个失败了。我一直在尝试使用前瞻,但无法完全解决

我正在尝试将字符串拆分为其组成部分(关键字和 ID)

每一行的格式是一个或多个空格分隔的关键字,后跟一个或多个逗号分隔的 ID。 ID 仅为数字,关键字不包含逗号。

我正在使用 Java 来执行此操作。

最佳答案

我使用 replaceAll 找到了两行解决方案和split :

pattern = "(\\S+(?<!,)\\s+(\\d+\\s+)*)";
String[] keywords = theString.replaceAll(pattern+".*","$1").split(" ");
String[] ids = theString.split(pattern)[1].split(",\\s?");

我假设逗号始终紧接在每个 ID 的 ID 之后(这可以通过删除逗号相邻的空格来强制执行),并且没有尾随空格。

我还假设第一个关键字是一系列非空白字符(没有尾随逗号)\\S+(?<!,)\\s+ ,其余关键字(如果有)是数字 (\\d+\\s+)* 。我根据您的正则表达式尝试做出了这个假设。

这里的正则表达式非常简单,只需(贪婪地)采用任何后跟空格(或空格)的有效关键字序列。最长的是关键字列表,其余的是 ID。

完整代码:

public static void main(String[] args){
String pattern = "(\\S+(?<!,)\\s+(\\d+\\s+)*)";
Scanner sc = new Scanner(System.in);
while(true){
String theString = sc.nextLine();

String[] keywords = theString.replaceAll(pattern+".*","$1").split(" ");
String[] ids = theString.split(pattern)[1].split(",\\s?");

System.out.println("Keywords:");
for(String keyword: keywords){
System.out.println("\t"+keyword);
}
System.out.println("IDs:");
for(String id: ids){
System.out.println("\t"+id);
}
System.out.println();
}
}

示例运行:

red 124Keywords:    redIDs:    124red 25 124Keywords:    red    25IDs:    124red 25, 124Keywords:    redIDs:    25    124

关于java - 将字符串拆分为不同部分的正则表达式(使用 Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18855020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com