473,395 Members | 1,972 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,395 software developers and data experts.

How to use python regular expression to substitute string value

Hi,
I am new to python. I would like to know how to use python regular
expression to substitute string value?
I have an input string like this:
x:11 y:0 w:760 h:19 area:14440 areaPerCent:0
totalAreaPerCent:-3.08011e+16 type:3 path:///-/1/1

and I would like to convert it to:
rect x="11" y="0" width="760" height="14440"

all I care about the input string is x, y, w, h.

Thank you for any pointers.

Feb 26 '06 #1
7 3146
Al************@gmail.com writes:
Hi,
I am new to python. I would like to know how to use python regular
expression to substitute string value?
I have an input string like this:
x:11 y:0 w:760 h:19 area:14440 areaPerCent:0
totalAreaPerCent:-3.08011e+16 type:3 path:///-/1/1

and I would like to convert it to:
rect x="11" y="0" width="760" height="14440"

all I care about the input string is x, y, w, h.


I'd say you're better off with 'findall':
- -
import re
line = "x:11 y:0 w:760 h:19 area:14440 areaPerCent:0 totalAreaPerCent:-3.08011e+16 type:3 path:///-/1/1"
pattern = "x:(\d+) y:(\d+) w:(\d+) h:(\d+) area:(\d+)"
x, y, width, height, area = re.findall(pattern, line)[0]
print "rect x=\"%(x)s\" y=\"%(y)s\" width=\"%(width)s\" height=\"%(height)s\" ..." % locals()
- -

x .. area are strings when they come out of findall, so you may want to:
- -
x .. area = map (lambda x: int(x), re.findall (pattern, line)[0]
- -

--
Psi -- <http://www.iki.fi/pasi.savolainen>
Feb 26 '06 #2
Thanks. But i don't understand why I need to do this:
x. . area = map (lambda x: int(x), re.findall (pattern, line)[0]

if i have the value already by doing this:
x, y, width, height, area = re.findall(pattern, line)[0]
print "rect x=\"%(x)s\" y=\"%(y)s\" width=\"%(width)s\"
height=\"%(height)s\" ..." % locals()

Feb 26 '06 #3
You don't really need regexes for this.

Assuming there is no whitespace in any of your values, it should be
really easy to parse the string.

s = 'x:11 y:0 w:760 h:19 area:14440 areaPerCent:0
totalAreaPerCent:-3.08011e+16 type:3 path:///-/1/1'

s.split() # break the string on whitespace
['x:11', 'y:0', 'w:760', 'h:19', 'area:14440', 'areaPerCent:0', 'totalAreaPerCent:-3.08011e+16', 'type:3', 'path:///-/1/1']
[ t.split(':',1) for t in s.split() ] # break each term on the first
':' [['x', '11'], ['y', '0'], ['w', '760'], ['h', '19'], ['area', '14440'], ['areaPerCent', '0'], ['totalAreaPerCent', '-3.08011e+16'], ['type', '3'], ['path', '///-/1/1']]
d = dict([ t.split(':',1) for t in s.split() ]) # make a dict of the
list {'type': '3', 'area': '14440', 'h': '19', 'w': '760', 'areaPerCent': '0', 'y': '0', 'x': '11', 'path': '///-/1/1', 'totalAreaPerCent': '-3.08011e+16'}
Now you can do this:
new_s = 'rect x="%(x)s" y="%(y)s" width="%(w)s" height="%(h)s"' % d 'rect x="11" y="0" width="760" height="19"'


Feb 26 '06 #4
okay, but I have a simpler question, how can I split using only "\n"?

I try this:
strings = node.data.split("\n");
print node.data

for str in strings:
print str

where node.data has multiple lines, but in the for loop, I don't see
str gets print out.

Feb 26 '06 #5
Are you sure node.data contains newlines?
You could try just:
print node.data
print node.data.split('\n')

This should give you an idea. From the interpreter:
s = """ .... abc
.... def
.... xyz""" s.split('\n')

['', 'abc', 'def', 'xyz']

Feb 26 '06 #6
When I try your idea, I have this error

x, y, width, height = re.findall(pattern, str)[0]
IndexError: list index out of range

How can I use findall to handle error case? i.e. what if there is no
match? how can I handle it gracefully?

Feb 26 '06 #7
Al************@gmail.com writes:
When I try your idea, I have this error

x, y, width, height = re.findall(pattern, str)[0]
IndexError: list index out of range

How can I use findall to handle error case? i.e. what if there is no
match? how can I handle it gracefully?


This is explained in python docs, and do try them in interactive python,
for example IPython is great for this stuff.

- -
ipython ->

In [1]:import re

In [2]:line = "foobar"

In [3]:re.findall ("baz", line)
Out[3]:[]

In [4]:re.findall ("o", line)
Out[4]:['o', 'o']
- -

So you can do:
- -
match = re.findall(pattern, str)
if match:
x, y, width, height = match[0]
...
else:
# no match
- -

--
Psi -- <http://www.iki.fi/pasi.savolainen>
Feb 26 '06 #8

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

6
by: Chris Lasher | last post by:
Hello, I would like to create a set of very similar regular expression. In my initial thought, I'd hoped to create a regular expression with a variable inside of it that I could simply pass a...
25
by: Byte | last post by:
I know this is probably a stupid question, but I'm learning Python, and am trying to get the if function to work with letters/words. Basicly, I'm trying to write a script that when run, says ...
25
by: Mike | last post by:
I have a regular expression (^(.+)(?=\s*).*\1 ) that results in matches. I would like to get what the actual regular expression is. In other words, when I apply ^(.+)(?=\s*).*\1 to " HEART...
5
by: antar2 | last post by:
Hello, I am a beginner in Python and am not able to use a list element for regular expression, substitutions. list1 = list2 = Suppose that I want to substitute the vowels from list2 that...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.