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. 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>
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()
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"'
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.
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']
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? 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> This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics
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...
|
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
...
|
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...
|
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...
|
by: Charles Arthur |
last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
|
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
|
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...
|
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...
|
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...
|
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,...
|
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...
|
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...
|
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...
| |