Удалить апострофы из строки Python, если у них есть пробел до и / или после них - PullRequest
1 голос
/ 10 апреля 2020

У меня есть текст:

text = "the march' which 'cause those it's good ' way"

Мне нужно удалить все апострофы в тексте, если у них есть пробел до и / или после них:

"the march which cause those it's good way"

Я пытался:

re.sub("(?<=\b)'[a-z](?=\b)", "", text)

и

re.sub("\s'w+", " ", text)

Но ни один из способов не работает для меня

Ответы [ 4 ]

2 голосов
/ 10 апреля 2020

Вы можете использовать метод replace () для достижения этой цели. Как показано ниже:

text = "the march' which 'cause those it's good ' way"
new_text = text.replace("' "," ").replace(" ' "," ") 
1 голос
/ 10 апреля 2020

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

(?<= ) *' +|'(?= )|(?<= )'

Regex demo

import re
re.sub("(?<= ) *' +|'(?= )|(?<= )'", '', str)

Python demo

Python 'regex engine выполняет следующие операции.

(?<= )  # The following match must be preceded by a space  
 *      # match 0+ spaces
'       # match a single paren
 +      # match 1+ spaces
|       # or
'       # match a single paren
(?= )   # single paren must be followed by a space
|       # or
(?<= )  # The following match must be preceded by a space  
'       # match a single paren

(?<= ) is положительный взгляд за спиной ; (?= ) - это позитивный прогноз .

Обратите внимание, что это вызывает проблемы с "Gus 'gal" и "Это - ночь перед большим матчем по боулингу", где одиночные кавычки должны не подлежит удалению.

1 голос
/ 10 апреля 2020

Возможно ...

(\s'\s?|'\s)

Дано:

"the march' which 'cause those it's good ' way"

Заменить на: пробел, т. Е. ""

Вывод:

"the march which cause those it's good way"

Всего 131 шаг.

Демо: https://regex101.com/r/x04Vg1/1

1 голос
/ 10 апреля 2020

Это можно сделать, созерцая три разные возможности и связав их цепочкой с |, заботясь о заказе:

re.sub(r"(\s\'\s)|(\s\')|(\'\s)", ' ', text)
# "the march which cause those it's good way"

См. demo


  • (\s\'\s)|(\s\')|(\'\s)

    • 1-я альтернатива (\s\'\s)

      • 1-я группа захвата (\s\'\s)

      • \s соответствует любому символу пробела (равен [\r\n\t\f\v ])

      • \' соответствует символу буквально (с учетом регистра)
      • \s соответствует любому пробелу (равен [\r\n\t\f\v ])
    • 2-й вариант (\s\')
      • 2-я группа захвата (\s\')
      • \s соответствует любому пробелу (равен [\r\n\t\f\v ])
      • \' соответствует символу буквально (с учетом регистра)
    • 3-й вариант (\'\s)
      • 3-я группа захвата (\'\s)
      • \' соответствует символу буквально (с учетом регистра)
      • \s соответствует любому пробелу (равен [\r\n\t\f\v ])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...