Java 将字母数字值与至少一个数字匹配的正则表达式

Java 将字母数字值与至少一个数字匹配的正则表达式,java,regex,Java,Regex,我想匹配一个模式,该模式在字母数字字符之间包含连字符,连字符两侧至少有一个数字 我在Java中尝试了以下模式。但是下面提到的一些模式没有正确匹配 Pattern alpha_numeric = Pattern.compile("([a-zA-Z0-9]+\\-[0-9]+)|([0-9]+\\-[a-zA-z0-9]+)"); 理想情况下,应匹配的一些模式包括: a-45 45-a 45-45 a-aaa4 aaa4a-bbb5 a4aa-a etc 以下模式不应匹配: a-a b-b et

我想匹配一个模式,该模式在字母数字字符之间包含连字符,连字符两侧至少有一个数字

我在Java中尝试了以下模式。但是下面提到的一些模式没有正确匹配

Pattern alpha_numeric = Pattern.compile("([a-zA-Z0-9]+\\-[0-9]+)|([0-9]+\\-[a-zA-z0-9]+)");
理想情况下,应匹配的一些模式包括:

a-45
45-a
45-45
a-aaa4
aaa4a-bbb5
a4aa-a etc
以下模式不应匹配:

a-a
b-b etc

我应该如何着手修复它?

由于正则表达式的定义,有些模式不匹配

你的正则表达式说:

(alphanumeric string)-(numbers string) OR (numbers string)-(alphanumeric string)
  • 模式45-45不匹配,因为它是(数字字符串)-(数字字符串)
  • 模式a-aaa4不匹配,原因是(字母数字字符串)-(字母数字字符串)

  • 您应该涵盖更多的情况并重写您的正则表达式。

    您必须考虑“至少一位”的要求,这在正则表达式中转换为

    $ sed -r 's/([a-zA-Z0-9]*-[a-zA-Z]*[0-9][a-zA-Z0-9]*|[a-zA-Z]*[0-9][a-zA-Z0-9]*-[a-zA-Z0-9]*)/{\1}/g' file
    {a-45}
    {45-a}
    {45-45}
    {a-aaa4}
    {aaa4a-bbb5}
    {a4aa-a}
    a-a
    b-b
    -
    a-
    -a
    {-4}
    {4-}
    
    \d+-需要Java字符串中的转义符

    例如:

        public void test() {
        final List<String> testCases = Arrays.asList("a-45",
                "45-a",
                "45-45",
                "a-aaa4",
                "aaa4a-bbb5",
                "a4aa-a etc",
                "a-a",
                "b-b");
    
        final String regex = "[a-z]*\\d+[a-z]*";
        final String leftMatch = regex + "-.*";
        final String rightMatch = ".*-" + regex;
    
        for (String string : testCases) {
          System.out.println(string + " : " + string.matches(leftMatch + "|" + rightMatch));
        }
    }
    

    类似于“([a-zA-Z]*\d+[a-zA-Z]*\\-\d+)”(\d+\\-[a-zA-Z]*\d+[a-zA-Z]*)”的东西会起作用吗?我对这些正则表达式有点困惑。我写了一个条件,比如(字母数字)-(字母数字),但是不应该匹配的模式,比如a-a也被匹配。虽然这个正则表达式看起来有点长,但它似乎工作得很好。谢谢
    a-45 : true
    45-a : true
    45-45 : true
    a-aaa4 : true
    aaa4a-bbb5 : true
    a4aa-a etc : true
    a-a : false
    b-b : false