1

我有一个需要使用正则表达式读取的文件。该字符串基本上可以包含任何内容(大写、小写、空格、符号等),只要该行不超过 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.”

不要问拼写,那是我收到的示例文件中的内容。

感谢您的帮助,希望我能在离开自助洗衣店之前得到回复,因为我在长岛,由于飓风,家里没有电或互联网。

4

4 回答 4

2

添加\"您的正则表达式,例如:

  data.matches("[A-Za-z0-9 ,.?!%&()@$-_:;\"\\]+$")

在哪里\"使用,它将"用作匹配的文字。

于 2012-11-01T17:48:03.090 回答
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);
        }
于 2012-11-01T18:02:49.137 回答
0

这是从您的代码中复制粘贴

 "Yes, but an error is displayed, \"Fuser out.\"".matches("[A-Za-z0-9 ,.?!%&()@$-_:;\\\"]+$"));

它返回true,所以没关系。

但是当我从你的代码中复制粘贴时我遇到了问题。您的字符串“Fuser out.”中的字符“与您的正则表达式中的“不同的字符??

于 2012-11-01T17:53:48.983 回答
0

您可能在匹配该字符串时遇到问题,因为它使用了智能引号。以下文章对此有一些很好的信息: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]+$")
于 2012-11-01T17:54:20.097 回答