Регулярное выражение соответствует первому предложению даже на одном предложении - PullRequest
1 голос
/ 23 апреля 2019

У меня есть интересная проблема с регулярными выражениями.скажем, у меня есть такой абзац

Johannesburg (; Afrikaans: ; also known as Jozi, Jo'burg, and eGoli) is the largest city in South Africa and one of the 50 largest urban areas in the world. It is the provincial capital and largest city of Gauteng, which is the wealthiest province in South Africa. While Johannesburg is not one of South Africa's three capital cities, it is the seat of the Constitutional Court. The city is located in the mineral-rich Witwatersrand range of hills and is the centre of large-scale gold and diamond trade.

это регулярное выражение (^.*?[a-z]{2,}[.!?])\s+\W*[A-Z] хорошо работает при поиске первого предложения на основе логики конструкции предложения.проблема возникает, когда у меня есть только одно предложение, подобное этому

Johannesburg (; Afrikaans: ; also known as Jozi, Jo'burg, and eGoli) is the largest city in South Africa and one of the 50 largest urban areas in the world.

Понятно, что это предложение не соответствует, потому что после него нет другого предложения, начинающегося после.Теперь у меня вопрос, как мне настроить это выражение, чтобы оно относилось к обоим случаям?

1 Ответ

2 голосов
/ 23 апреля 2019

Вы можете использовать чередование (^.*?[a-z]{2,}[.!?])(?:\s+\W*[A-Z]|$), чтобы соответствовать либо требуемой логике, либо утверждать конец строки $.

(^.*?[a-z]{2,}[.!?])(?=\s+\W*[A-Z]|$)

Regex demo

Если вам не нужна группа захвата () на старте, вы можете также пропустить ее и использовать положительный взгляд в сторону (?=, чтобы получить только совпадение:

^.*?[a-z]{2,}[.!?](?=\s+\W*[A-Z]|$)

Regex demo

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