Разбивает строку пробела в список, но не разбивает пробел в кавычках, а также допускает использование специальных символов (например, $,%, et c) в кавычках в Python - PullRequest
1 голос
/ 07 апреля 2020
s = 'hello "ok and @com" name'

s.split()

Есть ли способ разбить это на список, который разделяет пробельные символы, но также не разбивает белые символы в кавычках и допускает специальные символы в кавычках.

["hello", '"ok and @com"', "name"]

Я хочу, чтобы он мог выводить подобное, но также разрешать использование специальных символов, несмотря ни на что.

Может ли кто-нибудь помочь мне с этим?

(Я просматривал другие посты, связанные с этим, но эти посты не позволяют использовать специальные символы, когда я его тестировал.)

Ответы [ 2 ]

0 голосов
/ 07 апреля 2020

Вы можете сделать это с re.split(). Шаблон регулярного выражения: { ссылка }

import re

re.split(r'\s+(?=[^"]*(?:"[^"]*"[^"]*)*$)',s) 

Возвращает:

['hello', '"ok and @com"', 'name']

Объяснение регулярного выражения:

\s+             # match whitespace
(?=             # start lookahead
   [^"]*        # match any number of non-quote characters
   (?:          # start non-capturing group, repeated zero or more times
      "[^"]*"   # one quoted portion of text
      [^"]*     # any number of non-quote characters
   )*           # end non-capturing group
   $            # match end of the string
)               # end lookahead
0 голосов
/ 07 апреля 2020

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

import re

items = []
s = 'hello "ok and @com" name'
patt = re.compile(r'(".*?")') 

# regex to find quoted strings
match = re.search(patt, s)
if match:
    for item in match.groups():
        items.append(item)

# split on whitespace after removing quoted strings
for item in re.sub(patt, '', s).split():
    items.append(item)

>>>items
['"ok and @com"', 'hello', 'name']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...