Regex для удаления определенных слов в python
Я хочу сделать некоторые манипуляции с помощью regex в python.
Таким образом, ввод равен +1223,+12_remove_me,+222,+2223_remove_me
а выход должен быть +1223,+222
Вывод должен содержать только _remove_me
запятыми слова, которые не содержат _remove_me
и только одну запятую между каждым словом.
Примечание : REGEX, который я пробовал \+([0-9|+]*)_
, \+([0-9|+]*)
и некоторая другая комбинация, с помощью которой я не получил требуемый вывод.
Примечание 2 Я не могу использовать цикл, нужно сделать это без цикла только с регулярным выражением.
- spritecollide и убивающие спрайты
- сладострастный, неспособный обрабатывать строку юникода?
- Как быстро проверить список?
- matplotlib inline Python 2.7%
- Простейший способ построения трехмерной поверхности заданных трехмерных точек
Ваше регулярное выражение кажется неполным, но вы были на правильном пути. Обратите внимание, что символ трубы внутри символьного класса рассматривается как литерал, а ваш [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)
- RuntimeWarning: компиляция версии 2.6 модуля 'lxml.etree' не соответствует версии исполнения 2.7
- Как объединить строки и преобразовать их в столбцы
- Невозможно изменить высоту кадра, ширину в OpenCV
- В python, как работает «if-else и for» в словаре
- как получить доступ к широте и долготе в скрипте с помощью beautifulsoup?
- Принудительная реализация метода во всех наследующих классах
- Как установить файл .whl в виртуальный файл PyCharm?
- Keras: ImportError: нет модуля с именем data_utils
- Создание arctan2 () непрерывно за 2pi
- Как найти максимальный продукт двух элементов в списке?
- Как вы используете «os.path.isfile ()» с набором «путь», но переменное имя файла в python 2.7?