我在这里看到了几个与我在这里要求的相匹配的线程。但没有一个是具体的。如果我有一个像"New Delhi"
这样的字符串,我希望我的代码能够提取New Delhi
。所以这里的报价被剥离了。我想在开始和结束时删除任何标点符号。
到目前为止,这有助于在最后删除标点符号:
String replacedString = replaceable_string.replaceAll("\\p{Punct}*([a-z]+)\\p{Punct}*", "$1");
我在这里做错了什么?我的输出是 "New Delhi
,起始引号仍在那里。
答案 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])