从单词中删除开头的标点符号

时间:2013-04-04 18:32:46

标签: java regex

我在这里看到了几个与我在这里要求的相匹配的线程。但没有一个是具体的。如果我有一个像"New Delhi"这样的字符串,我希望我的代码能够提取New Delhi。所以这里的报价被剥离了。我想在开始和结束时删除任何标点符号。

到目前为止,这有助于在最后删除标点符号:

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

我在这里做错了什么?我的输出是 "New Delhi ,起始引号仍在那里。

6 个答案:

答案 0 :(得分:6)

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

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

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

正则表达式的^部分代表文本的开头,$代表文本的结尾。因此,^\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}符号。 +符号表示“一个或多个”,因此如果它们出现在文本的开头或结尾,它将匹配许多标点符号。

希望这就是你要找的东西:)

答案 1 :(得分: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)(")

答案 2 :(得分:0)

String replacedString = replacable_string.replaceAll("^\"|\"$", "");

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

也应该有效。

答案 3 :(得分: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));
    }

答案 4 :(得分:0)

String s = "\"New Deli\"".replaceAll("\\p{Punct}*(\\P{Punct}+)\\p{Punct}*", "$1");

答案 5 :(得分:-1)

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