Как убрать лишние знаки препинания (оставить только первую) в тексте? - PullRequest
0 голосов
/ 05 августа 2020

Я хочу удалить все лишние знаки препинания (а также пробелы) в тексте на английском языке sh в строковом типе и сохранить только первую пунктуацию из каждой «группы» знаков пунктуации / пробела.

Пунктуации: string.punctuation: !"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~

Пример:

I like this city very much!!! :\\ $%& It is because it contains many good food..! $ % Unfortunately,,, I need to go back home tomorrow. .

Должно быть:

I like this city very much! It is because it contains many good food. Unfortunately, I need to go back home tomorrow.

Любая помощь очень признателен. Спасибо!

Ответы [ 4 ]

0 голосов
/ 05 августа 2020

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

r'(?<=[^!.,>$%&-][!.,>$%&-])[!.,>$%& -]+(?<! )'

(Для удобства чтения я уменьшил набор специальных символов, как показано.)

Начало ваш движок!

Если бы строка была:

I like this city very much!!! $%& It is because it contains many good food..! $ % Unfortunately,,, I need to go back home tomorrow. . ->

, была бы возвращена следующая строка:

I like this city very much! It is because it contains many good food. Unfortunately, I need to go back home tomorrow.

Python механизм регулярных выражений выполняет следующие операции.

(?<=           : begin a positive lookbehind
  [^!.,>$%&-]  : match any character other than those shown in the
                 character class 
  [!.,>$%&-]   : match any character in the character class
)              : end positive lookbehind
[!.,>$%& -]+   : match any character in the character class
(?<! )         : negative lookbehind matches a space

Обратите внимание, что

[!.,>$%& -]+(?<! )

можно заменить на:

[!.,>$%& -]*[!.,>$%&-]
0 голосов
/ 05 августа 2020

Вы можете использовать следующий шаблон для сопоставления двух или более знаков пунктуации / пробела:

[!\"#$%&\'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~ ]{2,}

Затем вы можете определить функцию для замены совпадения первым символом совпадения в дополнение к пробел, если оригинал содержал хотя бы один.

Мои знания о python не очень хорошие, но код должен выглядеть примерно так:

import re

def my_replace(match):
    match = match.group()
    return match[0] + (" " if " " in match else "")

regex = r"[!\"#$%&\'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~ ]{2,}"

test_str = "I like this city very much!!! :\\\\ $%& It is because it contains many good food..! $ % Unfortunately,,, I need to go back home tomorrow. ."

result = re.sub(regex, my_replace, test_str, 0)

if result:
    print (result)

Вывод:

I like this city very much! It is because it contains many good food. Unfortunately, I need to go back home tomorrow. 

Попробуйте онлайн .

0 голосов
/ 05 августа 2020

Этот скрипт удаляет все повторяющиеся знаки препинания и обрабатывает особый случай лишних пробелов в скопированных кластерах знаков препинания.

mstr = "I like this city very much!!! :\\ $%& It is because it contains many good food..! $ % Unfortunately,,, I need to go back home tomorrow. ."
newstr = []
for x in mstr:
    if x in string.punctuation:
        if pctindex == 0:
            newstr.append(x)
            pctindex += 1
    else:
        if (x == ' ') and pctindex > 0:
            pass
        else:
           newstr.append(x) 
           pctindex = 0
print(''.join(newstr))

он возвращает:

I like this city very much!It is because it contains many good food.Unfortunately,I need to go back home tomorrow.
0 голосов
/ 05 августа 2020

Предполагая, что мы можем исправить строку, удалив пунктуацию только (без удаления пробелов), и что первая пунктуация верна (согласно заголовку), тогда это должно быть разрешимо. Регулярное выражение r'([A-Za-z\s]+[,])[,\s]*' соответствует группе символов и пробелов, за которыми следует знак препинания (для краткости, запятая). Вторая группа соответствует всем ненужным пробелам и знакам препинания. Так что что-то вроде

m = re.findall("[A-Za-z\s]+[,])[,\s]*", test_string)
' '.join(m)

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

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