java - 文本未正确分割

标签 java regex split

我正在尝试从字符串中提取文本和十六进制颜色。

目前符号“">”有一个小问题

这是我当前获得的代码;

package main.cache;

import java.util.Arrays;
import java.util.regex.Pattern;

public class Main {

    public static void extract(String string) { 
        final String STARTS_WITH_COLOR_LITERAL = "^[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}";
        final Pattern pattern = Pattern.compile(STARTS_WITH_COLOR_LITERAL);
        Object[] objects = Arrays.stream(string.split("<col=")).filter(part -> pattern.matcher(part).find()).toArray();
        String name;
        String color = null;
        for (int i = 0; i < objects.length; i++) {
            String[] line = objects[i].toString().split(">");
            if (line.length == 1) {
                name = line[0];
            } else {
                color = line[0];
                name = line[1];
            }
            System.out.println("Color " + color + ", name " + name);
        }
    }

    public static void main(String[] args) {
        extract("something before<col=ff00ff>mercides> car<col=ffff00>plates");
    }
}

例如,当传递此参数时,输出预计为

Color null, name something before
Color ff00ff, name mercides> car
Color ffff00, name plates

我当前得到的输出是

Color null, name something before
Color ff00ff, name mercides
Color ffff00, name plates

最佳答案

如果您正在寻找配对 color/name (按此顺序)您可以使用:(?><col=(?<color>[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})>)?(?<text>(?><.*?>)?[^<]+)

static void extract(String string) {
    Pattern pattern =
            Pattern.compile("(?><col=(?<color>[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})>)?(?<name>(?><.*?>)?[^<]+)");
    Matcher m = pattern.matcher(string);
    while (m.find()) {
        String color = m.group("color");
        String name = m.group("name");
        System.out.printf("Color %s, name %s\n", color, name);
    }
}
/*
Color null, name something before
Color ff00ff, name mercides> car
Color ffff00, name plates
<小时/>

正则表达式详细信息,请参阅 Regex101有关详细信息(请参阅右侧的说明)

  1. (?><col=(?<color>[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})>)?是颜色,以 <col 开头并以 > 结尾里面有十六进制字符,它是可选的,所以有一个 ?最后

  2. (?<text>(?><.*?>)?[^<]+)名称组,可以有另一个应答器,但最后一个字符可以是 <

关于java - 文本未正确分割,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57546116/

相关文章:

python - 从文件中读取时去除空格和新行

没有公共(public)分隔符的Python字符串拆分

python - 我们如何将整列的内容拆分为同一个表中的单独列?

java - jsch-->无法使用java从unix跳转服务器连接到另一个unix服务器

java - 为什么同一个 JAVA 程序在 Windows 和 Linux 等不同平台上运行不同?

java - 单元测试注解?

javascript - 将任意数量的字符替换为另一个字符

java - 如何在 Scanner 的方法中存储类型信息

regex - 原子正则表达式 : discarding multiline text around blocks

php - 获取无效日期并 preg_replace 它