Как разделить строку с помощью [] в Python - PullRequest
2 голосов
/ 05 февраля 2009

Итак, из этой строки:

"имя [идентификатор]"

Мне нужно это:

"идентификатор"

Я использовал str.split ('[]'), но это не сработало. Требуется только один разделитель?

Ответы [ 9 ]

13 голосов
/ 05 февраля 2009

Используйте регулярное выражение:

import re 
s = "name[id]"
re.find(r"\[(.*?)\]", s).group(1) # = 'id'

str.split() принимает строку, на которую нужно разделить ввод. Например:

"i,split,on commas".split(',') # = ['i', 'split', 'on commas']

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

import re
s = "name[id]"

# split by either a '[' or a ']'
re.split('\[|\]', s) # = ['name', 'id', '']
7 голосов
/ 05 февраля 2009

Или

"name[id]".split('[')[1][:-1] == "id"

или

"name[id]".split('[')[1].split(']')[0] == "id"

или

re.search(r'\[(.*?)\]',"name[id]").group(1) == "id"

или

re.split(r'[\[\]]',"name[id]")[1] == "id"
3 голосов
/ 05 февраля 2009

Да, разделителем является весь строковый аргумент, передаваемый для разделения. Таким образом, ваш пример будет разбивать только строку вроде 'name [] id []'.

Попробуйте, например. что-то вроде:

'name[id]'.split('[', 1)[-1].split(']', 1)[0]

'name[id]'.split('[', 1)[-1].rstrip(']')
2 голосов
/ 05 февраля 2009

Я не фанат регулярных выражений, но в подобных случаях это часто обеспечивает лучшее решение.

Триптих уже рекомендовал это, но я хотел бы отметить, что групповое присвоение? P <> может использоваться для назначения соответствия словарному ключу:

>>> m = re.match(r'.*\[(?P<id>\w+)\]', 'name[id]')
>>> result_dict = m.groupdict()
>>> result_dict
{'id': 'id'}
>>>
1 голос
/ 05 февраля 2009
def between_brackets(text):
    return text.partition('[')[2].partition(']')[0]

Это также будет работать, даже если ваша строка не содержит конструкции […], и в конце подразумевается подразумеваемое значение ] в случае, если в строке есть только [.

1 голос
/ 05 февраля 2009

Вам на самом деле не нужны регулярные выражения для этого. Функция .index () и нарезка строк будут работать нормально.

Скажем, у нас есть:

>>> s = 'name[id]'

Тогда:

>>> s[s.index('[')+1:s.index(']')]
'id'

Для меня это легко читается: «начинайте с одного символа после [и заканчивайте перед]».

0 голосов
/ 11 августа 2018

Вы можете получить значение списка, используя []. Например, создайте список из URL, как показано ниже, с разделением.

>>> urls = 'http://quotes.toscrape.com/page/1/'

Создается список, подобный приведенному ниже.

>>> print( urls.split("/") )
['http:', '', 'quotes.toscrape.com', 'page', '11', '']

А что, если вы хотите получить значение "http" из этого списка? Вы можете использовать как это

>>> print(urls.split("/")[0])
http:

Или что, если вы хотите получить значение "1" из этого списка? Вы можете использовать как это

>>> print(urls.split("/")[-2])
1
0 голосов
/ 29 апреля 2010

Я новичок в python, и это старый вопрос, но, может быть, такой?

str.split('[')[1].strip(']')

0 голосов
/ 05 февраля 2009

str.split использует весь параметр для разделения строки. Попробуйте:

str.split("[")[1].split("]")[0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...