我尝试寻找这个问题的答案并阅读 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)
它似乎有效,我只是想确保这是正确的方法,因为它看起来不正确。
您的分析是对的,匹配失败是因为文本中有一个点不包含在字符类中。
但是,您可以简化正则表达式 - 无需重复逗号,它们在类中没有任何特殊含义:
if(strLine.substring(63,86).matches("[A-Za-z0-9,. ]+"))
Run Code Online (Sandbox Code Playgroud)
不过,您确定永远不必匹配非 ASCII 字母或任何其他类型的标点符号吗?
| 归档时间: |
|
| 查看次数: |
835 次 |
| 最近记录: |