Убрать пунктуацию в начале слова, кроме специальных символов - PullRequest
0 голосов
/ 14 декабря 2018

Вопрос: Как использовать регулярные выражения для удаления знаков препинания в начале слов, но чтобы сохранить слово .NET?

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

text = 'Must-have skills: -.Net programming experience; -2 years experience in C++.'
newtext = re.sub(r'<.*?>|&nbsp;', ' ', text)
re.sub(r'[!,.:;—](?= |$)', ' ', newtext)

И у меня был следующий результат:

'Must-have skills  -.Net programming experience  -2 years experience in C++ '

Желаемый результат:

'Must-have skills  .Net programming experience  2 years experience in C++ '

PS :

Мне нужно убрать все знаки препинания перед словами.Не нужно удалять только точку в слове .Net.Например, -2 преобразовать в 2, но -.Net преобразовать в .Net

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Вы можете использовать

import re
text = 'Must-have skills: -.Net programming experience; -2 years experience in C++.'
text = re.sub(r'[!,.:;—](?= |$)', ' ', text)
print(re.sub(r'(?i)(?:(?!\.net\b|\b-\b)[^\w\s])+(?=[^\w\s]*\b)', '', text))
# => Must-have skills  .Net programming experience  2 years experience in C++

См. Демоверсию Python .

Подробности

  • (?i) - нечувствительный к регистру режим на
  • (?:(?!\.net\b|\b-\b)[^\w\s])+ - любой знак препинания ([^\w\s]), 1 или более вхождений, как можно больше, которые не запускают ни одну из последовательностей:
    • \.net\b - .net как целое слово
    • | - или
    • \b-\b - дефис, заключенный в слово char
  • (?=[^\w\s]*\b) - положительный прогноз, требующий 0+ знаков препинания, за которыми следует позиция границы слова сразу справа от текущего местоположения.
0 голосов
/ 14 декабря 2018

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

[!,.:;-](?!Net|$|\W)

Затем используйте Regex.Replace (), чтобы удалить совпадения из вашего текста.

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