6

我在这里看到了一些与我在这里提出的问题相匹配的线程。但没有一个是具体的。如果我有一个类似的字符串"New Delhi",我希望我的代码能够提取New Delhi。所以这里的引号被去掉了。我想去掉任何标点符号,一般在开始和结束时。

到目前为止,这有助于去除末尾的标点符号:

String replacedString = replaceable_string.replaceAll("\\p{Punct}*([a-z]+)\\p{Punct}*", "$1");

我在这里做错了什么?我的输出 "New Delhi 仍然存在开头的报价。

4

6 回答 6

6

以下将从String对象的开头和结尾删除标点符号(如果存在):

String s = "\"New, Delhi\"";

// Output: New, Delhi
System.out.println(s.replaceAll("^\\p{Punct}|\\p{Punct}$", ""));

Regex的^部分表示文本的开头,并$表示文本的结尾。因此,^\p{Punct}将匹配作为第一个字符\p{Punct}$的标点符号,并将匹配作为最后一个字符的标点符号。我使用|(OR) 来匹配第一个表达式或第二个表达式,结果是^\p{Punct}|\p{Punct}$.

如果要删除String对象开头和结尾的所有标点符号,可以使用以下命令:

String s = "\"[{New, Delhi}]\"";

// Output: New, Delhi
System.out.println(s.replaceAll("^\\p{Punct}+|\\p{Punct}+$", ""));

我只是+在每个\p{Punct}. 该+符号表示“一个或多个”,因此如果它们出现在文本的开头或结尾,它将匹配许多标点符号。

希望这就是你要找的:)

于 2013-04-04T18:42:59.947 回答
2
class SO {
    public static void main(String[] args) {
        String input = "\"New Delhi\"";
        String output = "";

        try {
            output = input.replaceAll("(^\\p{P}+)(.+)(\\p{P}+$)", "($1)($2)($3)");
        } catch (IndexOutOfBoundsException e) {
        }

        System.out.println("Input: " + input);
        System.out.println("Output: " + output);
    }
}

结果:

Input: "New Delhi"
Output: (")(New Delhi)(")
于 2013-04-04T19:02:30.780 回答
0
String replacedString = replacable_string.replaceAll("^\"|\"$", "");

或者

String replacedString = replace_string.replace("\"", "");

也应该工作。

于 2013-04-04T18:35:43.827 回答
0

尝试使用这个:

String data = "\"New Delhi\"";
    Pattern pattern = Pattern.compile("[^\\w\\s]*([\\w\\s]+)[^\\w\\s]*");

    Matcher matcher = pattern.matcher(data);
    while (matcher.find()) {
        // Indicates match is found. Do further processing
        System.out.println(matcher.group(1));
    }
于 2013-04-04T18:37:06.517 回答
0

尝试

String s = "\"New Deli\"".replaceAll("\\p{Punct}*(\\P{Punct}+)\\p{Punct}*", "$1");
于 2013-04-04T18:38:24.493 回答
-1

你的 [az] 只会捕获小写字母,没有空格。试试([a-zA-Z])

于 2013-04-04T18:38:29.230 回答