By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
440,171 Members | 776 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 440,171 IT Pros & Developers. It's quick & easy.

multiline regular expression (replace)

P: n/a
Hi all,

I would like to perform regular expression replace (e.g. removing
everything from within tags in a XML file) with multiple-line pattern.
How can I do this?

where = open("filename").read()
multilinePattern = "^<tag.... <\/tag>$"
re.search(multilinePattern, where, re.MULTILINE)

Thanks greatly,
Zdenek
May 29 '07 #1
Share this Question
Share on Google+
6 Replies


P: n/a
On May 29, 2:03 am, Zdenek Maxa <zdenekm...@yahoo.co.ukwrote:
Hi all,

I would like to perform regular expression replace (e.g. removing
everything from within tags in a XML file) with multiple-line pattern.
How can I do this?

where = open("filename").read()
multilinePattern = "^<tag.... <\/tag>$"
re.search(multilinePattern, where, re.MULTILINE)

Thanks greatly,
Zdenek
Why not use an xml package for working with xml files? I'm sure
they'll handle your multiline tags.

http://effbot.org/zone/element-index.htm
http://codespeak.net/lxml/

~Sean

May 29 '07 #2

P: n/a
ha**********@gmail.com wrote:
On May 29, 2:03 am, Zdenek Maxa <zdenekm...@yahoo.co.ukwrote:
>Hi all,

I would like to perform regular expression replace (e.g. removing
everything from within tags in a XML file) with multiple-line pattern.
How can I do this?

where = open("filename").read()
multilinePattern = "^<tag.... <\/tag>$"
re.search(multilinePattern, where, re.MULTILINE)

Thanks greatly,
Zdenek

Why not use an xml package for working with xml files? I'm sure
they'll handle your multiline tags.

http://effbot.org/zone/element-index.htm
http://codespeak.net/lxml/

~Sean

Hi,

that was merely an example of what I would like to achieve. However, in
general, is there a way for handling multiline regular expressions in
Python, using presumably only modules from distribution like re?

Thanks,
Zdenek
May 29 '07 #3

P: n/a
Zdenek Maxa wrote:
ha**********@gmail.com wrote:
>On May 29, 2:03 am, Zdenek Maxa <zdenekm...@yahoo.co.ukwrote:
>>Hi all,

I would like to perform regular expression replace (e.g. removing
everything from within tags in a XML file) with multiple-line pattern.
How can I do this?

where = open("filename").read()
multilinePattern = "^<tag.... <\/tag>$"
re.search(multilinePattern, where, re.MULTILINE)

Thanks greatly,
Zdenek
Why not use an xml package for working with xml files? I'm sure
they'll handle your multiline tags.

http://effbot.org/zone/element-index.htm
http://codespeak.net/lxml/

~Sean


Hi,

that was merely an example of what I would like to achieve. However, in
general, is there a way for handling multiline regular expressions in
Python, using presumably only modules from distribution like re?

Thanks,
Zdenek
So you mean you don't know how to *create* multiline patterns?

One way is to use """ ... """ or ''' ... ''' quoting, which allows you
to include newlines as part of your strings. Another is to use \n in
your strings to represent newlines.

regards
Steve
--
Steve Holden +1 571 484 6266 +1 800 494 3119
Holden Web LLC/Ltd http://www.holdenweb.com
Skype: holdenweb http://del.icio.us/steve.holden
------------------ Asciimercial ---------------------
Get on the web: Blog, lens and tag your way to fame!!
holdenweb.blogspot.com squidoo.com/pythonology
tagged items: del.icio.us/steve.holden/python
All these services currently offer free registration!
-------------- Thank You for Reading ----------------

May 29 '07 #4

P: n/a
On May 29, 11:03 am, Zdenek Maxa <zdenekm...@yahoo.co.ukwrote:
Hi all,

I would like to perform regular expression replace (e.g. removing
everything from within tags in a XML file) with multiple-line pattern.
How can I do this?

where = open("filename").read()
multilinePattern = "^<tag.... <\/tag>$"
re.search(multilinePattern, where, re.MULTILINE)
If it helps, I have the following function:

8<-----------------------------------------------------------
def update_xml(infile, outfile, mapping, deep=False):
from xml.etree import cElementTree as ET
from utils.elementfilter import ElementFilter
doc = ET.parse(infile)
efilter = ElementFilter(doc.getroot())
changes = 0
for key, val in mapping.iteritems():
pattern, repl = val
efilter.filter = key
changes += efilter.sub(pattern, repl, deep=deep)
doc.write(outfile, encoding='UTF-8')
return changes

mapping = {
'/portal/content-node[@type=="page"]/@action': ('.*', 'ZZZZ'),
'/portal/web-app/portlet-app/portlet/localedata/title':
('Portal', 'Gateway'),
}

changes = update_xml('c:\\working\\tmp\\test.xml', 'c:\\working\\tmp\
\test2.xml', mapping, True)

print 'There were %s changes' % changes
8<-----------------------------------------------------------

where utils.elementfilter is this module:

http://gflanagan.net/site/python/ele...ementfilter.py

It doesn't support `re` flags, but you could change the sub method of
elementfilter.ElementFilter to do so, eg.(UNTESTED!):

def sub(self, pattern, repl, count=0, deep=False, flags=None):
changes = 0
if flags:
pattern = re.compile(pattern, flags)
for elem in self.filtered:
...
[rest of method unchanged]
...

Gerard

May 29 '07 #5

P: n/a
Hi,

yes:

import re

a="""
I Am
Multiline
but short anyhow"""

b="(I[\s\S]*line)"

print re.search(b, a,re.MULTILINE).group(1)
gives

I Am
Multiline

Be aware that . matches NO newlines!!!
May be this caused your problems?

regards
Holger
Zdenek Maxa wrote:
ha**********@gmail.com wrote:
>On May 29, 2:03 am, Zdenek Maxa <zdenekm...@yahoo.co.ukwrote:
>>Hi all,

I would like to perform regular expression replace (e.g. removing
everything from within tags in a XML file) with multiple-line pattern.
How can I do this?

where = open("filename").read()
multilinePattern = "^<tag.... <\/tag>$"
re.search(multilinePattern, where, re.MULTILINE)

Thanks greatly,
Zdenek

Why not use an xml package for working with xml files? I'm sure
they'll handle your multiline tags.

http://effbot.org/zone/element-index.htm
http://codespeak.net/lxml/

~Sean


Hi,

that was merely an example of what I would like to achieve. However, in
general, is there a way for handling multiline regular expressions in
Python, using presumably only modules from distribution like re?

Thanks,
Zdenek
May 29 '07 #6

P: n/a
Hi,

Thanks a lot for useful hints to all of you who replied to my question.
I could easily do now what I wanted.

Cheers,
Zdenek
Holger Berger wrote:
Hi,

yes:

import re

a="""
I Am
Multiline
but short anyhow"""

b="(I[\s\S]*line)"

print re.search(b, a,re.MULTILINE).group(1)
gives

I Am
Multiline

Be aware that . matches NO newlines!!!
May be this caused your problems?

regards
Holger
Zdenek Maxa wrote:

>ha**********@gmail.com wrote:
>>On May 29, 2:03 am, Zdenek Maxa <zdenekm...@yahoo.co.ukwrote:
Hi all,

I would like to perform regular expression replace (e.g. removing
everything from within tags in a XML file) with multiple-line pattern.
How can I do this?

where = open("filename").read()
multilinePattern = "^<tag.... <\/tag>$"
re.search(multilinePattern, where, re.MULTILINE)

Thanks greatly,
Zdenek
Why not use an xml package for working with xml files? I'm sure
they'll handle your multiline tags.

http://effbot.org/zone/element-index.htm
http://codespeak.net/lxml/

~Sean
Hi,

that was merely an example of what I would like to achieve. However, in
general, is there a way for handling multiline regular expressions in
Python, using presumably only modules from distribution like re?

Thanks,
Zdenek

May 30 '07 #7

This discussion thread is closed

Replies have been disabled for this discussion.