Как я могу сопоставить цитируемый текст, исключая начальные и конечные пробелы? - PullRequest
0 голосов
/ 14 января 2009

т.е. матч

 He said, "For my part, it was Greek to me. "

должно быть

For my part, it was Greek to me.

Без пробела. Я пробовал

\"\s*([^\"]*)\s*\"

но он всегда соответствует конечным пробелам в группе.

Ответы [ 3 ]

2 голосов
/ 14 января 2009

попробовать:

\"\s*([^\"]*?)\s*\"

Но будьте осторожны, эта версия зависит от заключительной кавычки (потому что она ленивая). Когда вы добавляете ленивый оператор здесь, он захватывает наименьшую возможную строку, какую только может. Если закрывающих кавычек нет, это регулярное выражение завершится ошибкой

Если вы уверены, что нет пустых строк, вы можете использовать:

\"\s*([^\"]*[^\"\s])\s*\"

Основная проблема этой версии заключается в том, что вы нажимаете как минимум на один символ.

Честно говоря, глядя на это дважды, я бы использовал первый шаблон. Вы ищете закрывающую цитату и не избегаете кавычек. Это будет работать 100% времени для ваших текущих потребностей.

1 голос
/ 14 января 2009

Не проще ли обрезать пробелы впоследствии, используя простые строковые функции? Это также упростило бы регулярное выражение.

0 голосов
/ 14 января 2009

А что если вы заставите его иметь последний символ не пустым пространством? Примерно так:

\"\s*([^\"]*[^\s])\s*\"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...