我查看了其他 stackoverflow 问题,找不到问同一个问题的问题,所以这里是:
如何匹配字符串的第一个和最后一个字符(可以是多行或空格)。
例如:
String = "this is a simple sentence"
请注意,该字符串包含开始和结束引号。
如何匹配字符串以引号(“)开头和结尾的第一个和最后一个字符。
我试过了:
^"|$" and \A"\Z"
但这些不会产生预期的结果。
提前感谢您的帮助:)
答案 0 :(得分:3)
这是你在找什么?
String input = "\"this is a simple sentence\"";
String result = input.replaceFirst("(?s)^\"(.*)\"$", " $1 ");
如果输入字符串的第一个和最后一个字符以"
开头和结尾,则它将用空格替换。它也可以跨多行工作,因为DOTALL
标志由(?s)
指定。
答案 1 :(得分:2)
匹配整个输入".*"
的正则表达式。在java中,它看起来像这样:
String regex = "\".*\"";
System.out.println("\"this is a simple sentence\"".matches(regex)); // true
System.out.println("this is a simple sentence".matches(regex)); // false
System.out.println("this is a simple sentence\"".matches(regex)); // false
如果您想删除引号,请使用:
String input = "\"this is a simple sentence\"";
input = input.replaceAll("(^\"|\"$)", "")); // this is a simple sentence (without any quotes)
如果您希望这可以在多行上使用,请使用:
String input = "\"this is a simple sentence\"\n\"and another sentence\"";
System.out.println(input + "\n");
input = input.replaceAll("(?m)(^\"|\"$)", "");
System.out.println(input);
产生输出:
"this is a simple sentence"
"and another sentence"
this is a simple sentence
and another sentence
正则表达式(?m)(^"|"$)
的解释:
(?m)
表示“正则表达式其余部分的换行符之前和之前的插入符号和美元匹配”(^"|"$)
表示^"
或"$
,表示“行首,然后是双引号”或“双引号然后结束行”答案 2 :(得分:0)
为什么不使用基于String的charAt
方法获取第一个和最后一个字符的简单逻辑?对空/不完整的字符串进行一些检查,你应该完成。
答案 3 :(得分:0)
String regexp = "(?s)\".*\"";
String data = "\"This is some\n\ndata\"";
Matcher m = Pattern.compile(regexp).matcher(data);
if (m.find()) {
System.out.println("Match starts at " + m.start() + " and ends at " + m.end());
}