Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java正则表达式匹配字符串,包含不带数字的单词,可以选择用逗号分隔_Java_Regex - Fatal编程技术网

java正则表达式匹配字符串,包含不带数字的单词,可以选择用逗号分隔

java正则表达式匹配字符串,包含不带数字的单词,可以选择用逗号分隔,java,regex,Java,Regex,受上一个问题的启发,我试图找到一个正则表达式,它匹配一个字符串,该字符串至少包含一个由字符而不是数字组成的单词。因此\w不适用。只有当一行中没有两个逗号时,逗号分隔的单词才可以 这是我发现的最好的例子: (.*\s+,?)*([a-zA-Z]+)+(,?\s+.*)* 但它与以下字符串不匹配: aaaaa,11111 11111,aaaaa 11111,aaaaa, ,aaaaa aaaaa, ,aaaaa, aaaaa,11111,, ,,aaaaa,bbbbb aaaaa,,bbbbb,c

受上一个问题的启发,我试图找到一个正则表达式,它匹配一个字符串,该字符串至少包含一个由字符而不是数字组成的单词。因此\w不适用。只有当一行中没有两个逗号时,逗号分隔的单词才可以

这是我发现的最好的例子:

(.*\s+,?)*([a-zA-Z]+)+(,?\s+.*)*
但它与以下字符串不匹配:

aaaaa,11111
11111,aaaaa
11111,aaaaa,
,aaaaa
aaaaa,
,aaaaa,
aaaaa,11111,,
,,aaaaa,bbbbb
aaaaa,,bbbbb,ccccc
aaaaa,bbbbb,,ccccc
aaaaa,bbbbb,ccccc
aaaaa,11111
下面是一个测试程序,用于确定正则表达式是否正确:

import java.util.*;
import java.lang.*;
import java.io.*;

class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
    String regex = "(.*\\s+,?)*([a-zA-Z]+)+(,?\\s+.*)*";
    String shouldMatch[] = new String[] {
        "aaaaa",
        "aaaaa bbbbb",
        "aaaaa 11111",
        "11111 aaaaa",
        "aaaaa,11111",
        "aaaaa, 11111",
        "aaaaa,  11111",
        "11111,aaaaa",
        "11111, aaaaa",
        "11111,  aaaaa",
        "11111,aaaaa,",
        ",aaaaa",
        "aaaaa,",
        ",aaaaa,",
        "aaaaa,11111,,",
        ",,aaaaa,bbbbb",
        "aaaaa1111 bbbbb",
        "aaaaa1111 bbbbb ccccc",
        "aaaaa1111bbbbb ccccc",
        "aaaaa11111bbbbb ccccc 22222",
        ",,aaaaa bbbbb",
        "aaaaa,,bbbbb ccccc",
        "aaaaa,,bbbbb,ccccc",
        "aaaaa,bbbbb,,ccccc",
        "aaaaa,bbbbb,ccccc",
        "aaaaa,11111"
    };

    String shouldNotMatch[] = new String[] {
        "aaaaa11111",
        "11111bbbbb",
        "aaaaa11111bbbbb",
        "aaaaa11111bbbbb 11111ccccc",
        "aaaaa11111bbbbb ccccc11111",
        "aaaaa,,bbbbb",
        "aaaaa,,11111",
        ",,aaaaa",
        "aaaaa,,",
        "11111",
        "11111,22222",
        "11111 22222",
        ""
    };

    boolean result = true;

    for(String stringToTest : shouldMatch){
        if (!(stringToTest.matches(regex))){
            System.out.println(stringToTest + " Don't match. WRONG.");
            result = false;
        }
    }

    for(String stringToTest : shouldNotMatch){
        if (stringToTest.matches(regex)){
            System.out.println(stringToTest + " Match. WRONG.");
            result = false;
        }
    }

    if (result){
        System.out.println("Congratulation, your regex is right.");
    }
    else {
        System.out.println("Result of one ore more test is wrong.");
    }
}
}

编辑:再添加一些不应与正则表达式匹配的字符串、空字符串和数字(加逗号或空格)。

根据您的示例,以下内容应适用:

String regex = "(?i)(?=.*?(?<!,,)\\b[a-z]+\\b(?!,,))[, \\w]+";

String regex=“(?i)(?=*)(?这是有效的,我用您的测试程序检查过:

String regex = "^.*?(?<=\\s|^|,)(?<!,,)[A-Za-z]+(?!,,)(?=\\s|,|$).*$";

String regex=“^.*”(?如果逗号不在一行中,您说csw是可以的,但是有几个示例,例如:
“,.aaaaaabbbbb”
,它们应该匹配?@stevp.,.aaaa,bbbbbb应该匹配,因为bbbbbb前面只有一个逗号
“aaaaaaa,,bbbbbbbbccc”
也在匹配中。@SteveP.OP正在测试是否存在匹配的单词。@SteveP.是的,可能我不清楚。如果至少有一个单词由字符组成,并且后面或前面有一个逗号,则应该匹配。因此,AAAA、、bbbbb cccc应该匹配,因为CCCCCC是正确的。您已在这个问题。太令人印象深刻了!你用了什么?@ChthonicProject:在debuggex上创建的。com@anubhava通过他的测试程序运行它,我不记得了,有很多。@anubhava给你留下了深刻的印象。它对istance的“11111,aaaaa”或“aaaaa,bbbbb”不起作用是的,我在看。我并不困惑,
,aaaaa,bbbbb
应该匹配,但
aaaaa,,11111
不应该匹配。@holap这非常复杂。一开始看起来很简单。编写测试程序做得好,这让你更容易弄清楚自己想要什么/工作是什么我把它放在Debuggex.com(选择Python)…它给出了一个很好的图形。试试看。你甚至可以点击“嵌入StackOverflow”,抓取代码并添加到这里!你这个摇滚老兄!是的,这个问题起初对我来说也很简单,但我意识到它一点都不简单。这个正则表达式将教会我很多东西。非常感谢。我会研究它,也许我需要问一些进一步的解释。@holap没问题。我添加了一个图形,这可能会有所帮助。祝你好运!这很好一个有趣的问题!