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

6

我在这里看到了一些主题,有点符合我在这里提出的问题。 但是没有一个是具体的。 如果我有一个像"New Delhi"这样的字符串,我希望我的代码提取New Delhi。 因此,这里的引号被去掉了。 我想要去掉任何标点符号,一般是在开头和结尾。

到目前为止,以下内容可以帮助去除末尾的标点符号:

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

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

6个回答

6
如果存在的话,以下内容将从String对象的开头和结尾删除一个标点符号字符:
String s = "\"New, Delhi\"";

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

正则表达式中的^表示文本的开头,$表示文本的结尾。因此,^\p{Punct}将匹配作为第一个字符的标点符号,\p{Punct}$将匹配作为最后一个字符的标点符号。我使用了|(或)来匹配第一个表达式或第二个表达式,结果为^\p{Punct}|\p{Punct}$
如果您想从String对象的开头和结尾删除所有标点符号,则可以使用以下内容:
String s = "\"[{New, Delhi}]\"";

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

我只是在每个 \p{Punct} 后面添加了 + 符号。 + 符号意味着“一个或多个”,因此如果标点出现在文本的开头或结尾,则它将匹配许多标点符号。
希望这就是你要找的 :)

最佳解决方案。这适用于任何标点符号。调整也非常出色。干杯! - Knight
你可以使用以下代码:s.replaceAll("^[\\p{Punct}“”]+|[\\p{Punct}“”]+$", "")。其中 [] 表示一个字符组,因此你添加的任何字符都将被包含在其中。 - Ben Barkay
你可以像这样删除任何非字母数字字符: s.replaceAll("^[^0-9a-zA-Z]+|[^0-9a-zA-Z]+$", "")。方括号内的 ^ 取反了该组,使其匹配除包含的字符外的所有内容。 - Ben Barkay
在这种情况下,这可能很有用:codeString replacedString = replaceable_string.replaceAll("^\W|\W$", ""); - Knight
看,你已经在这方面打败了我。 - Ben Barkay
显示剩余2条评论

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)(")

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

或者

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

应该也能正常工作。


谢谢。但是:实际上,这不能处理所有类型的标点符号。例如,它无法提取<code>New Delhi,</code>并保留逗号在末尾。但还是谢谢! - Knight

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));
    }

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

-1

你的[a-z]只会匹配小写字母,而不包括空格。尝试使用([a-zA-Z ])


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接