Как сопоставить все слова с регулярным выражением, кроме URL или подобного? - PullRequest
0 голосов
/ 19 января 2019

Я пытаюсь сопоставить все слова в строках, кроме строк со знаками препинания, например URL.

Я пробовал много вариантов, но когда он работает во второй строке, неправильно в первой.

s1 = "My dog is nice! My cat not. www.test.org ?"
s2 = "I am."
regex = r"\b\w+\W* \b"
m1 = re.findall(regex, s1)
m2 = re.findall(regex, s2)

Вывод для m1 правильный:

['My ', 'dog ', 'is ', 'nice! ', 'My ', 'cat ', 'not. ']

Вывод для m2 не то, что я хочу:

['I ']

... но я хочу

['I ', 'am.']

1 Ответ

0 голосов
/ 19 января 2019

Вам нужна дополнительная проверка ...:

regex = r"\b\w+\W* \b|\b\w+\W$"

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

Рабочий код :

import re

s1 = "My dog is nice! My cat not. www.test.org ?"
s2 = "I am."

regex = r"\b\w+\W* \b|\b\w+\W$"

m1 = re.findall(regex, s1)
m2 = re.findall(regex, s2)

print(m1) # ['My ', 'dog ', 'is ', 'nice! ', 'My ', 'cat ', 'not. ']
print(m2) # ['I ', 'am.']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...