Java 如果可能,将字符串拆分为3个块(文本-数字-其他字符)

Java 如果可能,将字符串拆分为3个块(文本-数字-其他字符),java,regex,spring-boot,Java,Regex,Spring Boot,我最多需要把一个字符串分成3个块 第一个块仅用于字母 第二个是数字 第三个是剩余的 示例: Karbwqeaf 11D Jablunkovska 21/2 Tastoor Nstraat 43 Schzelkjedow Heajsd 3/5/7 m 344 Lasdasdt seavees 3., 729. tasdasd F 2. ul. Pasydufasdfa 73k/120 我需要像这样分开: Block1: Karbwqeaf Block2: 11 Block3: D Bloc

我最多需要把一个字符串分成3个块

  • 第一个块仅用于字母
  • 第二个是数字
  • 第三个是剩余的
示例

Karbwqeaf 11D
Jablunkovska 21/2
Tastoor Nstraat 43
Schzelkjedow
Heajsd 3/5/7 m 344
Lasdasdt seavees 3., 729. tasdasd F 2.
ul. Pasydufasdfa 73k/120
我需要像这样分开:

Block1: Karbwqeaf
Block2: 11
Block3: D

Block1: Jablunkovska
Block2: 21
Block3: /2

Block1: Tastoor Nstraat
Block2: 43
Block3: 

Block1: Schzelkjedow
Block2: 
Block3: 

Block1: Heajsd
Block2: 3
Block3: /5/7 m 344

Block1: Lasdasdt seavees 3
Block2: 3
Block3: ., 729. tasdasd F 2.

Block1: ul. Pasydufasdfa
Block2: 73
Block3: k/120
下面是我的代码,但我不知道如何才能满足我的所有要求。有什么想法吗

List<String> AllAddress = Arrays.asList("Karbwqeaf 11D", "Jablunkovska 21/2", "Tastoor Nstraat 43", "Schzelkjedow", "Heajsd 3/5/7 m 344", "Lasdasdt seavees 3., 729. tasdasd F 2.", "ul. Pasydufasdfa 73k/120");

for (String Address : AllAddress) {
    String block1 = "";
    String block2 = "";
    String block3 = "";
        
    Pattern pattern = Pattern.compile("(.+)\\s(\\d)(.*)");
    Matcher matcher = pattern.matcher(Address);
    if(matcher.matches()) {
        block1 = matcher.group(1);
        block2 = matcher.group(2);
        block3 = matcher.group(3);
        System.out.println("block1 = " + block1);
        System.out.println("block2 = " + block2);
        System.out.println("block3 = " + block3);
    }
}
List AllAddress=Arrays.asList(“Karbwqeaf 11D”、“Jablunkovska 21/2”、“Tastoor Nstraat 43”、“Schzelkjedow”、“Heajsd 3/5/7 m 344”、“Lasdasdt seavees 3.,729.tasdasd F 2”、“ul.Pasydufasdfa 73k/120”);
for(字符串地址:AllAddress){
字符串块1=“”;
字符串块2=“”;
字符串块3=“”;
Pattern=Pattern.compile((.+)\\s(\\d)(.*);
Matcher Matcher=pattern.Matcher(地址);
if(matcher.matches()){
block1=匹配器组(1);
block2=匹配器组(2);
block3=匹配器组(3);
System.out.println(“block1=“+block1”);
System.out.println(“block2=“+block2”);
System.out.println(“block3=“+block3”);
}
}

您可以使用3个捕获组,其中第二组匹配1个或多个数字,第三组匹配任意字符0+次

^([^\d\r\n]+)(?:\h+(\d+)(.*))?$
解释

  • ^
    字符串的开头
  • 捕获组1
    • [^\d\r\n]+
      匹配除换行符或数字以外的任何字符
  • 关闭第一组
  • (?:
    非捕获组
    • \h+
      匹配1+水平空白字符
    • (\d+)(.*)
      组2中捕获1个或多个数字,并在组3中捕获0个或多个字符
  • )?
    关闭非捕获组并将其设置为可选
  • $
    字符串结尾

您可以使用3个捕获组,其中第二组匹配1个或多个数字,第三组匹配任意字符0+次

^([^\d\r\n]+)(?:\h+(\d+)(.*))?$
解释

  • ^
    字符串的开头
  • 捕获组1
    • [^\d\r\n]+
      匹配除换行符或数字以外的任何字符
  • 关闭第一组
  • (?:
    非捕获组
    • \h+
      匹配1+水平空白字符
    • (\d+)(.*)
      组2中捕获1个或多个数字,并在组3中捕获0个或多个字符
  • )?
    关闭非捕获组并将其设置为可选
  • $
    字符串结尾

([^\\d]+)\\s(\\d)?\\s?(.*)中更改正则表达式。
([^\\d]+)\\s(\\d)?\\s?(.*)中更改正则表达式。