Разделение регулярных выражений в python

#python-3.x #regex

#python-3.x #регулярное выражение

Вопрос:

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

например, у нас есть строка ‘это мое рабочее место.Работа ограничена.это образец текста. это текст 2. Работа ограничена ‘

Я хочу сначала разделить с использованием точки, а затем с «Ограничением работы»

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

 textforsplit='this is my worksplace.Work restricted.this is a sample text.this is text 2.Work restricted'
testArray=re.split('[.]',textforsplit)
  

это работает с точкой, и я могу получить список в виде

 ['this is my worksplace','Work restricted','this is a sample text','this is text2', 'Work restricted']
  

Но я хочу снова отфильтровать результаты, и мне нужно получить список, исключающий текст «Работа ограничена», то есть окончательный список должен быть

 ['this is my worksplace','this is a sample text, 'this is text 2']
  

могу ли я в любом случае добиться этого, используя изменения в условиях регулярных выражений в python

Спасибо

Ответ №1:

Для этого нет необходимости использовать регулярное выражение, поскольку разделителем является фиксированная строка. Просто используйте обычный str.split() метод. Затем вы можете удалить Work restricted , используя понимание списка.

 textforsplit='this is my worksplace.Work restricted.this is a sample text'
testArray=textforsplit.split('.')
testArray = [x for x in testArray if x != 'Work restricted']
  

Комментарии:

1. спасибо за ваш ответ, я обновил вопрос, чтобы избежать путаницы, сначала мы должны разделить с помощью dot, а затем с помощью ‘Word restricted’. Не могли бы вы помочь

2. большое спасибо, это работает, я проверю все условия и обновлю

3. Можем ли мы добавить несколько условий в оператор if, в одном из сценариев строка может быть такой: «это простой текст. Работа ограничена.»в конце может быть точка, и разделение создаст пустой элемент списка «. здесь [«это простой текст»,»Работа ограничена»,»] . Итак, мне нужно удалить пустые элементы «. Итак, в условии if я могу проверить наличие != ‘Ограничение на работу или «, правильно?

4. if x != 'Work restricted' and x != '' and ...

5. или if x not in {'Work restricted', '', ...}

Ответ №2:

Вы можете фильтровать их с помощью понимания списка:

 testArray = [x for x in testArray if x != 'Work restricted']
  

Комментарии:

1. спасибо за ваш ответ, я обновил вопрос, чтобы избежать путаницы, сначала мы должны разделить с помощью dot, а затем с помощью ‘Word restricted’. Не могли бы вы помочь

Ответ №3:

Вот чистое решение для регулярных выражений, использующее findall :

 >>> textforsplit='this is my worksplace.Work restricted.this is a sample text.this is text 2.Work restricted'
>>> print ( re.findall(r'(?:^|(?<=.))(?!Work restricted)[^.] ', textforsplit) )
['this is my worksplace', 'this is a sample text', 'this is text 2']
  

Демонстрация регулярных выражений

Подробности регулярного выражения:

  • (?:^|(?<=.)) : Если мы начинаем или предыдущий символ является точкой
  • (?!Work restricted) : Отрицательный прогноз, чтобы утверждать, что у нас нет Work restricted впереди
  • [^.] : Сопоставьте 1 любого символа, который не является ТОЧКОЙ