Разделение строки python по всем разделителям - PullRequest
0 голосов
/ 16 января 2020

У меня есть следующие слова:

a. 'abc_bank_portfolios'
b. 'abc-bank-portfolios'
c. 'abc/bank portfolios'
d. 'abc.bank.portfolios'

Для всех вышеприведенных примеров я хочу вывод как: ['abc', 'bank', 'portfolios']

Короче говоря, я хочу разбить строку, используя любой разделитель

Мой код выглядит следующим образом:

import re
list_of_words = re.findall(r"[\w']+", <input_string>)

Это works for all cases except when there is an underscore.

Если я сделаю: re.findall(r"[\w']+", "abc_bank_portfolios"), вывод будет [abc_bank_portfolios]. Я хочу это как ['abc', 'bank', 'portfolios'] даже для underscore дела.

Что я здесь не так делаю? Как получить желаемый результат для всех случаев?

Ответы [ 2 ]

2 голосов
/ 16 января 2020

\w соответствует буквам, цифрам и подчеркиванию. Вам нужно будет более конкретно указать c, что вы считаете символами слова.

list_of_words = re.findall(r"[a-z0-9']+", input_string, re.I)
1 голос
/ 16 января 2020

Как вам кажется, вы знаете разделители (_, -, /, ., ), но не знаете доступных символов для каждого поле (то есть: разрешены ли числа? как насчет @? et c ...), я бы предложил использовать re.split(), который ведет себя подобно str.split().

Требуемое регулярное выражение r'[_\-/\. ]' для соответствия:

  • _ - подчеркивание
  • \- - обратная коса sh (сбежал потому что в противном случае он указывает диапазон)
  • / - форвард sla sh
  • \. - точка (экранированный, потому что в противном случае это означает " любой символ")
  • - пробел
import re

inputs = [
  'abc_bank_portfolios',
  'abc-bank-portfolios',
  'abc/bank portfolios',
  'abc.bank.portfolios',
]

for item in inputs:
  print(re.split(r'[_\-/\. ]', item))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...