Regex: удалить строки после sla sh только тогда, когда они содержат более одного слова - PullRequest
2 голосов
/ 14 марта 2020

Как удалить строку после sla sh, только когда в строке более одного слова? В спецификациях c рассмотрите следующую строку:

    0      1     2        0       1      2   3   
 CENTRAL CARE HOSPITAL/HOPITAL CENTRALE DE SOINS

Все символы после sla sh должны быть удалены, потому что есть 4 слова (HOPITAL, CENTRALE, DE, SOINS), а ограничение просто один. Тогда результат: CENTRAL CARE HOSPITAL

С другой стороны, у нас есть следующая строка:

   0     1     2    3  0
HAPPY SPRING BREAK 20/20

20 это время нужно сохранить, потому что это всего лишь одно слово ( \b[A-Za-z0-9]\b). Затем / sla sh следует заменить пустым пространством. Результат должен выглядеть следующим образом: HAPPY SPRING BREAK 20 20

Предположим, следующий набор тестов:

CENTRAL CARE HOSPITAL/HOPITAL CENTRALE DE SOINS
ELEMENTARY/INSTITUTION
FOUNDATION INSTITUTION/FUNDATION DEL INSTITUTO
HAPPY SPRING BREAK 20/20

Результат должен быть следующим:

CENTRAL CARE HOSPITAL
ELEMENTARY INSTITUTION
FOUNDATION INSTITUTION
HAPPY SPRING BREAK 20 20

В целом, просто оставьте строки после sla sh, только когда это одно слово, и добавьте пробел, где находится sla sh. В противном случае удалите строки после Sla sh

Я пробовал это регулярное выражение до сих пор, но не работает: (?:[\/])([A-Z0-9]*\b)(?!\b[A-Z]*)|[^\/]*$

Спасибо

1 Ответ

1 голос
/ 14 марта 2020

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

import re
rx = r'/(\w+(?:\W+\w+)+\W*$)?'
strs = ['CENTRAL CARE HOSPITAL/HOPITAL CENTRALE DE SOINS','ELEMENTARY/INSTITUTION','FOUNDATION INSTITUTION/FUNDATION DEL INSTITUTO','HAPPY SPRING BREAK 20/20']
for s in strs:
    print( re.sub(rx, lambda x: "" if x.group(1) else " ", s) )

См. Демоверсию Python онлайн . Вывод:

CENTRAL CARE HOSPITAL
ELEMENTARY INSTITUTION
FOUNDATION INSTITUTION
HAPPY SPRING BREAK 20 20

Регулярное выражение: /(\w+(?:\W+\w+)+\W*$)?, см. его онлайн-демо . Он соответствует:

  • / - sla sh
  • (\w+(?:\W+\w+)+\W*$)? - дополнительная группа захвата # 1, соответствующая
    • \w+ - 1 + слово chars
    • (?:\W+\w+)+ - 1+ последовательности из 1+ несловарных символов, за которыми следует 1+ слово символов
    • \W* - ноль или более несловарных символов
    • $ - конец строки.
...