2013-12-10 3 views
-3

У меня есть строка, как,вырезать питон строку

a = '(abcd: fgh 234) (abcd: d89 7j6) (pqrs: ..1000000002.) (xyz: 0983)' 

Мне нужно только значение «FGH 234» но у меня трудное время, чтобы сократить эту строку. Пожалуйста помоги.

Я попытался создать dict, но не помог, потому что «abcd» присутствует дважды, и он пошел на второй, а не на первый. Кроме того, попробовал использовать split, но не работал для меня. Раньше я не знал о модуле, но это исправило мою проблему. Спасибо за вашу помощь!

+5

Как вам нужно, чтобы получить ответ? Подумайте, со своей стороны, знание о том, что вы можете сделать это любым путём и в любом случае, будет по-разному опираться на разные ситуации. Это * просто * о резке * этой строки? Это о том, как найти строку в строке? Дайте нам еще один контекст, и ответы станут лучше. – jwarner112

+0

Вопросы с запросом кода должны демонстрировать минимальное понимание решаемой проблемы. Включите попытки решения, почему они не работают и ожидаемые результаты. См. Также: Контрольный список вопросов переполнения стека – Marcin

+0

Благодарим вас за ответ @ jwarner112 и @Marcin! Я хотел найти строку внутри строки. Я не знаю о модуле до того, как я новичок в программировании. Я попытался решить проблему несколькими способами, как создать dict или использовать split, но пошел в неправильном направлении. Я буду уверен, что в следующий раз, когда я задам свой вопрос, я поставлю код своей попытки. Извинения за возникшую проблему. – SGL

ответ

1

Я хотел бы использовать re.search здесь:

>>> from re import search 
>>> a = '(abcd: fgh 234) (abcd: d89 7j6) (pqrs: ..1000000002.) (xyz: 0983)' 
>>> search("\(abcd:\s(.+?)\)", a).group(1) 
'fgh 234' 
>>> 

Ниже приводится разбивка шаблона Regex:

\( # Opening parenthesis 
abcd: # abcd: 
\s  # Space 
(.+?) # One or more characters captured non-greedily 
\)  # Closing parenthsis 
2

Поскольку мы не знаем, что «вырезать строку» означает именно, Есть многие способы сделать это. Метод regex уже рассмотрен. Если данные, которые вы хотите всегда в одной и той же позиции в строке, простой slice будет делать трюк:

>>> a[7:14] 
'fgh 234' 
+2

Если они всегда между первым символом '': '' и первым '') ")', вы можете обобщить на 'a [a.index (": ") + 2: a.index (") ") ] '. – DSM

+1

@DSM это правда. Поскольку ОП не дал нам никакого контекста, я решил, что я пойду с самым простым способом. – MattDMo

+0

+1 для прямой резки строки ... Когда OP задал вопрос, я был как 'почему вы просто не используете print'fgh 234'' – adil

1

Это зависит, что вы имеете в виду под "вырезать эту строку? Что остается неизменным?

Тривиален, вы можете «вырезать строку» между первым : и первым ) с использованием регулярных выражений:

>>> import re 
>>> a = '(abcd: fgh 234) (abcd: d89 7j6) (pqrs: ..1000000002.) (xyz: 0983)' 
>>> re.search(r':\s([^)]+)', a).group(1) 
'fgh 234' 

Вы можете использовать ту же технику, чтобы получить все элементы между в : и закрытии ) с регулярным выражением:

>>> re.findall(r':\s([^)]+)', a) 
['fgh 234', 'd89 7j6', '..1000000002.', '0983'] 

Тогда индексном один вы хотите:

>>> re.findall(r':\s([^)]+)', a)[0] 
'fgh 234' 
>>> re.findall(r':\s([^)]+)', a)[1] 
'd89 7j6' 

С более подробной информацией я могу дать более конкретное регулярное выражение.

Или, не регулярное выражение с помощью Python строкового опа:

>>> a[a.index(':')+2:a.index(')')] 
'fgh 234' 
Смежные вопросы