Регулярное выражение для удаления определенных строк из строк, разделенных запятыми - PullRequest
1 голос
/ 26 мая 2020

У меня есть строка, которая выглядит так, как показано ниже

string = "NO PICK: hey there, hey you,NO PICK:hey there you, haha"

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

string = "hey you, haha"

Я знаю, как удалить NO PICK: из самой строки, выполнив что-то вроде этого

import re
string = string.replace("NO PICK:", "")
print(string)

Но я не знаю, как создать regex для удаления целых подстрок, содержащих совпадать, сохраняя при этом другие строки, разделенные запятыми.

Примечание: Я использую pandas для объединения значений определенных столбцов, содержащих эти строки, и удаления из них NO PICK:.

Вот мой пример ниже

cc = [i for i in df.columns if i.startswith("Data")]
df[c] = df[cc].astype('unicode').apply(','.join, axis=1)

Здесь значение df[cc] не должно содержать тех строк, которые NO PICK:

Ответы [ 2 ]

1 голос
/ 26 мая 2020

вы можете разделить строку и проверить наличие NO PICK, если NO PICK отсутствует в подстроке списка, добавьте ее в список и, наконец, присоединитесь к списку с помощью ','

import re
value = "NO PICK: hey there, hey you,NO PICK:hey there you, haha"
value = value.split(',')
string = [v for v in value if not re.search('NO PICK', v)]
print(','.join(string))
1 голос
/ 26 мая 2020

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

df[cc].astype(str).str.replace(r'NO PICK:[^,]*,*', '').str.strip()

Регулярное выражение NO PICK:[^,]*,*:

  • NO PICK: - буквальный текст
  • [^,]* - ноль или более символов, кроме запятой
  • ,* - ноль или более запятых.

.str.strip() удалит избыточные начальные / конечные пробелы.

Если вы просто работаете со строками, вы можете использовать

string = "NO PICK: hey there, hey you,NO PICK:hey there you, haha"
print( ', '.join([x.strip() for x in string.split(",") if "NO PICK:" not in x]).strip() )

См. Python демонстрацию

Примечания:

  • string.split(",") разделяет строку запятыми
  • if "NO PICK:" not in x] отбрасывает все элементы с NO PICK: в них
  • x.strip() удаляет начальные / конечные пробелы из «допустимых» разделений
  • ', '.join(...).strip() объединяет "допустимые" элементы и удаляет все начальные / конечные пробелы
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...