允许逗号和句点的正则表达式

jes*_*029 1 java regex

我尝试寻找这个问题的答案并阅读 Regex Wiki,但我找不到我正在寻找的确切内容。

我有一个验证文档的程序。(这是别人写的)。

如果某些行或字符与正则表达式不匹配,则会生成错误。我注意到总是会产生一些错误的错误,我想纠正这个错误。我相信我已经将问题缩小为:

下面是一个例子:

此错误由程序逻辑标记:

ERROR: File header immediate origin name is invalid: CITIBANK, N.A. 
Run Code Online (Sandbox Code Playgroud)

这是导致该错误的代码:

if(strLine.substring(63,86).matches("[A-Z,a-z,0-9, ]+")){

                                }else{
                                    JOptionPane.showMessageDialog(null, "ERROR: File header immediate origin name is invalid: "+strLine.substring(63,86));
                                    errorFound=true;
                                    fileHeaderErrorFound=true;
                                    bw.write("ERROR: File header immediate origin name is invalid: "+strLine.substring(63,86));
                                    bw.newLine();
Run Code Online (Sandbox Code Playgroud)

我相信在运行时调用错误的原因是因为文本包含句点和逗号..我不确定如何在正则表达式中允许这些。

我试过用这个

if(strLine.substring(63,86).matches("[A-Z,a-z,0-9,,,. ]+")){
Run Code Online (Sandbox Code Playgroud)

它似乎有效,我只是想确保这是正确的方法,因为它看起来不正确。

Tim*_*ker 5

您的分析是对的,匹配失败是因为文本中有一个点不包含在字符类中

但是,您可以简化正则表达式 - 无需重复逗号,它们在类中没有任何特殊含义:

if(strLine.substring(63,86).matches("[A-Za-z0-9,. ]+"))
Run Code Online (Sandbox Code Playgroud)

不过,您确定永远不必匹配非 ASCII 字母或任何其他类型的标点符号吗?