我试着寻找这个问题的答案,并且还阅读了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,,,. ]+")){
它似乎工作我只是想确保这是正确的方式,因为它看起来不正确。
答案 0 :(得分:4)
您的分析正确,匹配失败,因为文本中有一个点未包含在character class中。
但是,你可以简化正则表达式 - 不需要重复逗号,它们在类中没有任何特殊含义:
if(strLine.substring(63,86).matches("[A-Za-z0-9,. ]+"))
你确定你永远不必匹配非ASCII字母或任何其他类型的标点符号吗?
答案 1 :(得分:0)
字母和数字:a-zA-Z0-9可以有效地替换为\ w表示'words'。 句点和逗号不需要转义,可以按原样使用。因此这个正则表达式可能会派上用场:
"[\w,.]"
希望这会有所帮助。 :)