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

Я хочу сделать регулярное выражение, которое может соответствовать предложению и предложению слова совпадений. Если '!', '?', '.'сопоставляется, тогда он рассматривается как конец предложения, а также соответствует каждому слову сопоставленного предложения.

Мое регулярное выражение для соответствия предложению: [^?!.]+

Мое регулярное выражение длясопоставьте каждое слово в отдельности: [^\s]+

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

... Протестированная строка ...

I am Raktim Banerjee. I love to code.

должен вернуться

2 sentence 8 words

И

 Stackoverflow is the best coding forum. I love stackoverflow!

должен вернуться

2 sentence 9 words.

Заранее благодарим за помощь.

Ответы [ 2 ]

1 голос
/ 23 сентября 2019

Я полагаю, вы сказали, что хотели это в JavaScript:

var s = 'I am Raktim Banerjee. I love to code.'

var regex = /\b([^!?. ]+)(?:(?: +)([^!?. ]+))*\b([!?.])/g
var m, numSentences = 0, numWords = 0;
do {
    m = regex.exec(s);
    if (m) {
        numSentences++;
        numWords += m[0].split(' ').length
    }
} while (m);
console.log(numSentences + ' sentences, ' + numWords + ' words')

Вот вторая итерация.Я изменил регулярное выражение, чтобы распознать несколько приветствий, мистер, миссис и доктор (вы можете добавить дополнительные), и добавить примитивное суб-регулярное выражение для распознавания адреса электронной почты.И я также немного упростил оригинальное регулярное выражение.Я надеюсь, что это поможет (без гарантий, потому что проверка электронной почты слишком упрощена):

var s = 'Mr. Raktim Banerjee. My email address is x.y.z@nowhere.com.'

var regex = /\b((Mrs?\.|Dr\.|\S+@\S+|[^!?. ]+)\s*)+([!?.])/g
var m, numSentences = 0, numWords = 0;
do {
    m = regex.exec(s);
    if (m) {
        numSentences++;
        numWords += m[0].split(' ').length
    }
} while (m);
console.log(numSentences + ' sentences, ' + numWords + ' words')
1 голос
/ 23 сентября 2019

Вы ищете что-то вроде этого:

import re
s1="I am Raktim Banerjee. I love to code. "
s2="Stackoverflow is the best coding forum. I love stackoverflow! "

print(len(re.compile("[^?!.]+").findall(s1))-1,"sentence",len(re.compile("[^\s]+").findall(s1)),"words")

print(len(re.compile("[^?!.]+").findall(s2))-1,"sentence",len(re.compile("[^\s]+").findall(s2)),"words")

Работа над выходами:

2 sentence 8 words
2 sentence 9 words
...