Python like sed using regexes

Question:

Let’s say, that I have:

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

and now using strings like in Perl/sed I would like to get

string=id

(in Perl it would look like string=~s/{'([a-zA-Z0-9]*)'.*$)/1/)

Could you please give me a little insight how to do that in python? I expect that the regex syntax will be similar, but I’m not sure about the python syntax and what imports should I use, I’m quite beginner in Python 🙂 Thank you a lot 🙂

Asked By: Johnzzz

||

Answers:

In Python you’d use the re module for regular expression operations. I modified your regular expression a bit, but generally, this is how regular expression replacement can be done in python:

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

The sub() function accepts the regex first, then the replacement and finally the string. The documentation of the re module has some more information:
http://docs.python.org/library/re.html

The r prefix to the strings passed as arguments basically tells Python to treat them as “raw” strings, where most backslash escape sequences are not interpreted.

Answered By: Kasperle

First of all, I agree with @PenguinCoder: since this is valid JSON, you should really think about just using the Python support for handling JSON.

I went to Google and typed in the keywords: Python regular expressions

Here are the top two hits:

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

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

If you read them you will find the answer.

Here’s working code:

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()
Answered By: steveha
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.