Как исключить целые предложения, разделенные пунктуацией? - PullRequest
0 голосов
/ 01 апреля 2019

Это регулярное выражение хорошо, если в каждой строке есть одно предложение (я хочу выделить предложения, начинающиеся с этих слов и заканчивающиеся точкой):

(How|What|Where|Is|Are|Has|Have|Do|Does)(.*)(\.)

Однако в строкахвот так:

What something? Is something.

Вся строка выделена.Я только хочу выделить Is something.

Я пробовал это:

(?![?!.])(How|What|Where|Is|Are|Has|Have|Do|Does)(.*)(\.)

Но ничего не произошло.Что я делаю не так?

https://regexr.com/4bdcr

Ответы [ 3 ]

1 голос
/ 01 апреля 2019

может быть это?

[How|Is|Where|What|Are][ \w+]*[\.|\?]

Все, что начинается с вопросительного слова, за которым следуют пробелы или слова

0 голосов
/ 01 апреля 2019

Вы можете использовать отрицательный класс символов здесь:

/(?:How|What|Where|Is|Are|Has|Have|Do|Does)([^?.\n]*)\./g

RegEx Demo

[^?.\n] - это отрицательный класс символов, который будет соответствовать любому символу, кроме ., ? или новой строки.

0 голосов
/ 01 апреля 2019

Вы можете попробовать заменить .* на [^.?!]*, что не будет совпадать на полной остановке или на любом другом знаке препинания:

\b(?:How|What|Where|Is|Are|Has|Have|Do|Does)\b[^.?!]*\.

Демо

Вот краткий фрагмент JavaScript, показывающий фактически используемое регулярное выражение:

var input = "What something? Is something.";
var regex = /\b((?:How|What|Where|Is|Are|Has|Have|Do|Does)\b[^.?!]*\.)/g;
var match = regex.exec(input);
console.log(match[1]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...