Регулярное выражение для удаления блоков из 3 или менее символов - PullRequest
2 голосов
/ 11 апреля 2019

Я пытаюсь создать шаблон регулярного выражения, который удаляет слова длиной менее 4 символов.Подвох заключается в том, что любые специальные символы (прежде всего:! @ # $% ^ & * ().,;?) Прикреплены к слову, например, "age?"не будет соответствовать условию удаления, так что "привет !!", "ты?", "привет, мальчик!"все должны быть сохранены из входной строки.Для иллюстрации:

string1='my name is jen!'

Я попробовал регулярное выражение,

regex1=re.compile(r'\b.{,3}\s')

и связал его с re.sub:

string2=re.sub(regex1,' ',string1)

, и это прекрасно работает, кроме 1Я должен подставить шаблон с пробелом, и иногда это нужно удалить вручную, и 2. Это не работает, если 3 слова или меньше слова находятся в конце строки.

string1='my name is jen'
re.sub(regex1,' ',string1)
out: ' name jen'

Есть ли лучшее регулярное выражение, которое можно использовать?Должен ли я вместо этого попытаться сохранить «слова», состоящие из 4 или более символов?

1 Ответ

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

Вы можете использовать следующее регулярное выражение:

\b\w{1,3}(?=\s|$)\s*

в вашем коде Python:

$ cat words3.py 
import re

string1='my name is jen!'
print(re.sub(r'\b\w{1,3}(?=\s|$)\s*','',string1)) 

выход:

name jen!

демо : https://regex101.com/r/ZEzYtM/3/

Примечание: Я учел только то, что знаки препинания и специальные символы будут добавлены в конце слова.

Если вы хотите избежать удаления таких слов, как !ab, используйте:

(?<=\s)\b\w{1,3}(?=\s|$)\s*

демо : https://regex101.com/r/ZEzYtM/4

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