Regex для удаления определенных слов в python

Я хочу сделать некоторые манипуляции с помощью regex в python.

Таким образом, ввод равен +1223,+12_remove_me,+222,+2223_remove_me а выход должен быть +1223,+222

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

Примечание : REGEX, который я пробовал \+([0-9|+]*)_ , \+([0-9|+]*) и некоторая другая комбинация, с помощью которой я не получил требуемый вывод.

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

Ваше регулярное выражение кажется неполным, но вы были на правильном пути. Обратите внимание, что символ трубы внутри символьного класса рассматривается как литерал, а ваш [0-9|+] соответствует цифре или | или символы + .

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

 ,?\+\d+_[^,]+ 

См. Демо-версию regex

Объяснение:

  • ,? – необязательно , (если «слово» находится в начале строки, оно должно быть необязательным)
  • \+ – буквальный +
  • \d+ – 1 + цифры
  • _ – буквальное подчеркивание
  • [^,]+ – 1+ символов, кроме ,

Демо-версия Python :

 import re p = re.compile(r',?\+\d+_[^,]+') test_str = "+1223,+12_remove_me,+222,+2223_remove_me" result = p.sub("", test_str) print(result) # => +1223,+222 

В вашем случае вам нужно regex с переговорами

 [^(_remove_me)] 

демонстрация

str.split() подход предполагает использование str.split() и исключение элементов, заканчивающихся на _remove_me :

 >>> s = "+1223,+12_remove_me,+222,+2223_remove_me" >>> items = [item for item in s.split(",") if not item.endswith("_remove_me")] >>> items ['+1223', '+222'] 

Или, если _remove_me может присутствовать где угодно внутри каждого элемента, используйте not in :

 >>> items = [item for item in s.split(",") if "_remove_me" not in item] >>> items ['+1223', '+222'] 

Затем вы можете использовать str.join() для str.join() объединения элементов в строку:

 >>> ",".join(items) '+1223,+222' 

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

 my_string = '+1223,+12_remove_me,+222,+2223_remove_me' #define string my_list = my_string.split(',') #create a list of words my_list = [word for word in my_list if '_remove_me' not in word] #stop here if you want a list of words output_string = ','.join(my_list)