2009-02-05 3 views

ответ

13

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

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', ''] 
+1

За все время я потратил на SO, это первый вопрос, где я думал, что «Использование регулярных выражений!» вместо «О, хорошо, не используйте регулярное выражение для ЭТОГО!» :) –

+0

По-прежнему нет необходимости в регулярном выражении. Вся эта пунктуация оскорбляет мои глаза! – bobince

+0

Ха-ха - я думал то же самое @Torsten – Triptych

7

Либо

"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" 
-1

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

str.split("[")[1].split("]")[0] 
+0

Wrong - str.split принимает строку любой длины – Triptych

+0

Я думаю, что Тайсон говорил, что str.split ("[]") будет разделяться на весь параметр, т. Е. "[]", А не "[" "]" индивидуально. Ничего плохого в его ответе. – Alinium

+0

«str» - это ключевое слово в Python, поэтому вам следует избегать использования его в качестве имени переменной в примерах! – phobie

3

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

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

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

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

Ницца! Теперь напишите один для «matrix [0] [1] [2]» – Triptych

+2

heh! [subscript.rstrip (']') для индекса в 'матрице [0] [1] [2]'. split ('[') [1:]]. Следующий! ;-) – bobince

+0

только посмотрев это. Неплохо. – Triptych

2

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

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

>>> m = re.match(r'.*\[(?P<id>\w+)\]', 'name[id]') 
>>> result_dict = m.groupdict() 
>>> result_dict 
{'id': 'id'} 
>>> 
1

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

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

>>> s = 'name[id]' 

Тогда:

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

Для меня это легко читается: "начать один символ после [и закончить до того, как]".

1
def between_brackets(text): 
    return text.partition('[')[2].partition(']')[0] 

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

0

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

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

+0

Предшествующий уровень техники от bobince и, пожалуйста, не используйте ключевое слово «str» для имен переменных! – phobie

Смежные вопросы