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

时间:2016-01-27 15:34:00

标签: java regex

我试着寻找这个问题的答案,并且还阅读了Regex Wiki,但我无法找到我正在寻找的东西。

我有一个验证文档的程序。 (它是由其他人写的)。

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

以下是一个例子:

程序逻辑标记此错误:

ERROR: File header immediate origin name is invalid: CITIBANK, N.A. 

以下是导致该错误的代码:

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();

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

我尝试过使用此

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

它似乎工作我只是想确保这是正确的方式,因为它看起来不正确。

2 个答案:

答案 0 :(得分:4)

您的分析正确,匹配失败,因为文本中有一个点未包含在character class中。

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

if(strLine.substring(63,86).matches("[A-Za-z0-9,. ]+"))

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

答案 1 :(得分:0)

字母和数字:a-zA-Z0-9可以有效地替换为\ w表示'words'。 句点和逗号不需要转义,可以按原样使用。因此这个正则表达式可能会派上用场:

"[\w,.]"

希望这会有所帮助。 :)