Соответствует только первому и последнему символу строки - PullRequest
3 голосов
/ 08 июля 2011

Я посмотрел на другие stackoverflow вопросы и не смог найти тот, который задавал тот же вопрос, поэтому вот он:

Как вы сопоставляете первый и последний символыстрока (может быть многострочной или пустой).

Так, например:

String = "this is a simple sentence"

Обратите внимание, что строка содержит начальные и конечные кавычки.

Какполучить совпадение с первым и последним символами, где строка начинается и заканчивается кавычкой (").

Я пытался:

^"|$" and \A"\Z"

, но они не дают желаемого результата.

Заранее спасибо за помощь:)

Ответы [ 4 ]

3 голосов
/ 08 июля 2011

Это то, что вы ищете?

String input = "\"this is a simple sentence\"";
String result = input.replaceFirst("(?s)^\"(.*)\"$", " $1 ");

Это заменит первый и последний символ входной строки пробелами, если он начинается и заканчивается ". Он также будет работать через несколько строк, поскольку флаг DOTALL указан как (?s).

2 голосов
/ 08 июля 2011

Регулярное выражение, соответствующее всему входному значению ".*".В 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) означает «кареткаи совпадение доллара после и до новой строки для оставшейся части регулярного выражения "
  • (^"|"$) означает ^" ИЛИ "$, что означает" начало строки, затем двойная кавычка "ИЛИ" двойная кавычка, а затем конецлинии "
0 голосов
/ 08 июля 2011
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());
}
0 голосов
/ 08 июля 2011

Почему бы не использовать простую логику получения первых и последних символов на основе charAt метода String?Поставьте несколько проверок на наличие пустых / неполных строк, и все готово.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...