我有一个需要使用正则表达式读取的文件。字符串基本上可以包含任何内容(大写,小写,空格,符号等),只要该行不超过60个字符即可。我尝试的方法适用于文件中的大多数字符串,但是,我需要能够允许引号,这是我被卡住的地方。这是我到目前为止所尝试的内容。
else if (data.matches("[A-Za-z0-9 ,.?!%&()@$-_:;\\\"]+$")
&& !label.equals("") && prompt.equals("") && data.length() <= 60)
{
prompt = data;
}
除了以下字符串
外,它还能正常读取所有其他内容 Yes, but an error is displayed, “Fuser out.”
不要问拼写,这是我给出的示例文件中的内容。
感谢您的帮助,希望我能在离开自助洗衣店之前得到回应,因为我在长岛上并且由于飓风而在家里没有电源或互联网。
答案 0 :(得分:2)
在正则表达式中添加\"
,例如下面:
data.matches("[A-Za-z0-9 ,.?!%&()@$-_:;\"\\]+$")
使用\"
时,它会使用"
作为匹配的文字。
答案 1 :(得分:0)
这是代码中的复制粘贴
"Yes, but an error is displayed, \"Fuser out.\"".matches("[A-Za-z0-9 ,.?!%&()@$-_:;\\\"]+$"));
然后它返回true,所以没关系。
但是当我从你的代码中复制粘贴时,我遇到了问题。字符串“在你的字符串中”Fuser out。“是一个不同于你的正则表达式的字符?”
答案 2 :(得分:0)
您可能遇到与该字符串匹配的问题,因为它使用smart quotes。以下文章提供了一些很好的信息:Handy regexes for smart quotes
摘要是您可以使用以下Unicode转义符将这些字符添加到正则表达式中:
\u201C\u201D\u201E\u201F\u2033\u2036
此外,在您的正则表达式(Java字符串中为\"
)中使用\\\"
时,您似乎打算在字符类中同时允许使用反斜杠和双引号。这不符合你的想法,\"
只匹配正则表达式中的文字"
字符,它只是有一个不必要的反斜杠。要将反斜杠实际包含为有效字符,您需要在java字符串中连续使用四个反斜杠。
您还需要转义连字符,否则$-_
将被解释为字符范围。
所以你的新正则表达式看起来像这样:
data.matches("[A-Za-z0-9 ,.?!%&()@$\\-_:;\\\\\"\\u201C\\u201D\\u201E\\u201F\\u2033\\u2036]+$")
答案 3 :(得分:0)
如果有人感兴趣的话,我最终会简化它。
if (data.matches("\n"))
{
// do nothing, ignore
}
else if (data.matches("[^ ]+$") && label.equals("")
&& data.length() <= 60)
{
label = data;
}
else if (data.matches(".+$")
&& !label.equals("") && prompt.equals("") && data.length() <= 60)
{
prompt = data;
}
else if (data.matches(".+$")
&& !label.equals("") && !prompt.equals("") && message.equals("")
&& data.length() <= 60)
{
message = data;
}
else if (data.matches("[^ ]+[ ]+[0-9]$") && label.equals("")
&& prompt.equals("") && message.equals("") && data.length() <= 60)
{
children = data;
String[] info = children.split("[ ]+");
parent = info[0];
numChildren = Integer.parseInt(info[1]);
tree.getNodeReference(parent).setNumChildren(numChildren);
}