2012-04-20 3 views
0

Допустим, что у меня есть:Python как SED с использованием регулярных выражений

string= '{'id': '1'}' 

и теперь использует строки как в Perl/СЭД Я хотел бы получить

string=id 

(в Perl это будет выглядеть строка = ~ s/{\ '([A-Za-Z0-9] ) \'. $)/\ 1 /)

Не могли бы вы дать мне немного понять, как сделать это в Python? Я ожидаю, что синтаксис регулярного выражения будет похож, но я не уверен в синтаксисе python и о том, какие импорты следует использовать, я довольно новичок в Python :) Большое вам спасибо :-)

+0

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

+4

Зачем вам нужно использовать регулярное выражение? Является ли строка «правильной JSON-форматированной строкой»? 'import json \ n jsonDict = json.loads (strVariable) strID = jsonDict ['id']' – PenguinCoder

+0

, чтобы уточнить: у меня есть следующий код: string = child.attrib (теперь в строке i есть {'id': '1' }), и я пытаюсь получить только имя атрибута с помощью регулярных выражений, поэтому в той же самой переменной строки у меня будет только id – Johnzzz

ответ

0

В Python вы 'd используйте модуль re для операций регулярного выражения. Я изменил регулярное выражение немного, но, как правило, это как регулярное выражение замены может быть сделано в Python:

>>> import re 
>>> s = "{'id': '1'}" 
>>> re.sub(r"{'([^\']*)'.*$", r'\1', string) 
'id' 

sub() функция принимает регулярное выражение первого, то замена и, наконец строку. Документация модуля повторного имеет больше информации: http://docs.python.org/library/re.html

r префикс строк, передаваемых в качестве аргументов в основном говорит Python, чтобы рассматривать их как «сырые» строки, где большинство последовательности обратной косой черты побег не интерпретированы.

+0

, спасибо, вот что я искал :-) , но у меня есть еще один не совсем соответствующий вопрос -> Я получаю свою строку от element.attrib (используя elementtree), но это не строка, поэтому я не могу передать ее re.sub ... есть ли способ, как преобразовать ее в строку? – Johnzzz

+0

Вы можете использовать метод 'str()' для преобразования объектов Python в строковое представление. Если вы используете метод 'element.attrib()', тем не менее, вы в основном получаете словарь python, так что манипуляции с строкой, вероятно, не лучший способ обработать эту информацию для начала. Если вам просто интересно, какие атрибуты определены для вашего элемента, вы можете вызвать 'element.attrib(). Keys()', чтобы получить список всех имен атрибутов. – Kasperle

+0

keeeeyyyys, я знал, что однажды использовал stg. Большое спасибо – Johnzzz

0

Прежде всего, я согласен с @PenguinCoder: так как это действительный JSON, вам стоит подумать только о том, чтобы использовать поддержку Python для обработки JSON.

Я пошел в Google и напечатал в ключевых словах: Python regular expressions

Вот два верхних хиты:

http://docs.python.org/library/re.html

http://docs.python.org/howto/regex.html

Если вы читали их, вы найдете ответ.

Вот рабочий код:

import re 

s = '''string= "{'id': '1'}"''' 

pat = re.compile(r"\s*([^=]+)\s*=[\s'\"]*{\s*'([^']+)'") 

m = pat.match(s) 

if m is not None: 
    id = m.group(1) 
    name = m.group(2) 
    result = "%s=%s" % (id, name) 
    # note: could also do this: result = "%s=%s" % m.groups() 
Смежные вопросы