Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   Python (http://www.velocityreviews.com/forums/f43-python.html)
-   -   Re: How to write replace string for object which will be substituted?[regexp] (http://www.velocityreviews.com/forums/t693659-re-how-to-write-replace-string-for-object-which-will-be-substituted-regexp.html)

MRAB 08-04-2009 10:55 PM

Re: How to write replace string for object which will be substituted?[regexp]
 
ryniek90 wrote:
> Hi.
> I started learning regexp, and some things goes well, but most of them
> still not.
>
> I've got problem with some regexp. Better post code here:
>
> "
> >>> import re
> >>> mail = '\nname@mail.com\nname1 [at] mail [dot] com\nname2 [$at$]

> mail [$dot$] com\n'
> >>> mail

> '\nname@mail.com\nname1 [at] mail [dot] com\nname2 [$at$] mail [$dot$]
> com\n'
> >>> print mail

>
> name@mail.com
> name1 [at] mail [dot] com
> name2 [$at$] mail [$dot$] com
>
> >>> maail = re.sub('^\n|$\n', '', mail)
> >>> print maail

> name@mail.com
> name1 [at] mail [dot] com
> name2 [$at$] mail [$dot$] com
> >>> maail = re.sub(' ', '', maail)
> >>> print maail

> name@mail.com
> name1[at]mail[dot]com
> name2[$at$]mail[$dot$]com
> >>> maail = re.sub('\[at\]|\[\$at\$\]', '@', maail)
> >>> print maail

> name@mail.com
> name1@mail[dot]com
> name2@mail[$dot$]com
> >>> maail = re.sub('\[dot\]|\[\$dot\$\]', '.', maail)
> >>> print maail

> name@mail.com
> name1@mail.com
> name2@mail.com
> >>> #How must i write the replace string to replace all this regexp's

> with just ONE command, in string 'mail' ?
> >>> maail = re.sub('^\n|$\n| |\[at\]|\[\$at\$\]|\[dot\]|\[\$dot\$\]',

> *?*, mail)
> "
>
> How must i write that replace pattern (look at question mark), to maek
> that substituion work? I didn't saw anything helpful while reading Re
> doc and HowTo (from Python Doc). I tried with 'MatchObject.group()' but
> something gone wrong - didn't wrote it right.
> Is there more user friendly HowTo for Python Re, than this?
>
> I'm new to programming an regexp, sorry for inconvenience.
>

I don't think you can do it in one regex, nor would I want to. Just use
the string's replace() method.

>>> mail = '\nname@mail.com\nname1 [at] mail [dot] com\nname2 [$at$]

mail [$dot$] com\n'
>>> mail

'\nname@mail.com\nname1 [at] mail [dot] com\nname2 [$at$] mail [$dot$]
com\n'
>>> print mail


name@mail.com
name1 [at] mail [dot] com
name2 [$at$] mail [$dot$] com

>>> maail = mail.strip()

name@mail.com
name1 [at] mail [dot] com
name2 [$at$] mail [$dot$] com

>>> maail = maail.replace(' ', '')
>>> print maail

name@mail.com
name1[at]mail[dot]com
name2[$at$]mail[$dot$]com
>>> maail = maail.replace('[at]', '@').replace('[$at$]', '@')
>>> print maail

name@mail.com
name1@mail[dot]com
name2@mail[$dot$]com
>>> maail = maail.replace('[dot]', '.').replace('[$dot$]', '.')
>>> print maail

name@mail.com
name1@mail.com
name2@mail.com

ryniek 08-05-2009 06:50 AM

Re: How to write replace string for object which will be substituted?[regexp]
 
On 5 Sie, 00:55, MRAB <pyt...@mrabarnett.plus.com> wrote:
> ryniek90 wrote:
> > Hi.
> > I started learning regexp, and some things goes well, but most of them
> > still not.

>
> > I've got problem with some regexp. Better post code here:

>
> > "
> > *>>> import re
> > *>>> mail = '\nn...@mail.com\nname1 [at] mail [dot] com\nname2 [$at$]
> > mail [$dot$] com\n'
> > *>>> mail
> > '\nn...@mail.com\nname1 [at] mail [dot] com\nname2 [$at$] mail [$dot$]
> > com\n'
> > *>>> print mail

>
> > n...@mail.com
> > name1 [at] mail [dot] com
> > name2 [$at$] mail [$dot$] com

>
> > *>>> maail = re.sub('^\n|$\n', '', mail)
> > *>>> print maail
> > n...@mail.com
> > name1 [at] mail [dot] com
> > name2 [$at$] mail [$dot$] com
> > *>>> maail = re.sub(' ', '', maail)
> > *>>> print maail
> > n...@mail.com
> > name1[at]mail[dot]com
> > name2[$at$]mail[$dot$]com
> > *>>> maail = re.sub('\[at\]|\[\$at\$\]', '@', maail)
> > *>>> print maail
> > n...@mail.com
> > name1@mail[dot]com
> > name2@mail[$dot$]com
> > *>>> maail = re.sub('\[dot\]|\[\$dot\$\]', '.', maail)
> > *>>> print maail
> > n...@mail.com
> > na...@mail.com
> > na...@mail.com
> > *>>> #How must i write the replace string to replace all this regexp's
> > with just ONE command, in string 'mail' ?
> > *>>> maail = re.sub('^\n|$\n| |\[at\]|\[\$at\$\]|\[dot\]|\[\$dot\$\]',
> > *?*, mail)
> > "

>
> > How must i write that replace pattern (look at question mark), to maek
> > that substituion work? I didn't saw anything helpful while reading Re
> > doc and HowTo (from Python Doc). I tried with 'MatchObject.group()' but
> > something gone wrong - didn't wrote it right.
> > Is there more user friendly HowTo for Python Re, than this?

>
> > I'm new to programming an regexp, sorry for inconvenience.

>
> I don't think you can do it in one regex, nor would I want to. Just use
> the string's replace() method.
>
> *>>> mail = '\nn...@mail.com\nname1 [at] mail [dot] com\nname2 [$at$]
> mail [$dot$] com\n'
> *>>> mail
> '\nn...@mail.com\nname1 [at] mail [dot] com\nname2 [$at$] mail [$dot$]
> com\n'
> *>>> print mail
>
> n...@mail.com
> name1 [at] mail [dot] com
> name2 [$at$] mail [$dot$] com
>
> *>>> maail = mail.strip()
> n...@mail.com
> name1 [at] mail [dot] com
> name2 [$at$] mail [$dot$] com
>
> *>>> maail = maail.replace(' ', '')
> *>>> print maail
> n...@mail.com
> name1[at]mail[dot]com
> name2[$at$]mail[$dot$]com
> *>>> maail = maail.replace('[at]', '@').replace('[$at$]', '@')
> *>>> print maail
> n...@mail.com
> name1@mail[dot]com
> name2@mail[$dot$]com
> *>>> maail = maail.replace('[dot]', '.').replace('[$dot$]', '.')
> *>>> print maail
> n...@mail.com
> na...@mail.com
> na...@mail.com


Too bad, I thought that the almighty re module could do anything, but
it failed with this (or maybe re can do what i want, but only few
people knows how to force him to that? :P).
But with help of MRAB, i choose The 3rd Point of Python's Zen -
"Simple is better than complex."

"
>>> mail = '\nname@mail.com\nname1 [at] mail [dot] com\nname2 [$at$] mail [$dot$] com\n'
>>> mail

'\nname@mail.com\nname1 [at] mail [dot] com\nname2 [$at$] mail [$dot$]
com\n'
>>> print mail


name@mail.com
name1 [at] mail [dot] com
name2 [$at$] mail [$dot$] com

>>> maail = mail.lstrip().rstrip().replace(' ', '').replace('[dot]', '.')..replace('[$dot$]', '.').replace('[at]', '@').replace('[$at$]', '@')
>>> print maail

name@mail.com
name1@mail.com
name2@mail.com
>>> #Did it :)

"

Thanks again :)

ryniek 08-05-2009 06:53 AM

Re: How to write replace string for object which will be substituted?[regexp]
 
On 5 Sie, 00:55, MRAB <pyt...@mrabarnett.plus.com> wrote:
> ryniek90 wrote:
> > Hi.
> > I started learning regexp, and some things goes well, but most of them
> > still not.

>
> > I've got problem with some regexp. Better post code here:

>
> > "
> > *>>> import re
> > *>>> mail = '\nn...@mail.com\nname1 [at] mail [dot] com\nname2 [$at$]
> > mail [$dot$] com\n'
> > *>>> mail
> > '\nn...@mail.com\nname1 [at] mail [dot] com\nname2 [$at$] mail [$dot$]
> > com\n'
> > *>>> print mail

>
> > n...@mail.com
> > name1 [at] mail [dot] com
> > name2 [$at$] mail [$dot$] com

>
> > *>>> maail = re.sub('^\n|$\n', '', mail)
> > *>>> print maail
> > n...@mail.com
> > name1 [at] mail [dot] com
> > name2 [$at$] mail [$dot$] com
> > *>>> maail = re.sub(' ', '', maail)
> > *>>> print maail
> > n...@mail.com
> > name1[at]mail[dot]com
> > name2[$at$]mail[$dot$]com
> > *>>> maail = re.sub('\[at\]|\[\$at\$\]', '@', maail)
> > *>>> print maail
> > n...@mail.com
> > name1@mail[dot]com
> > name2@mail[$dot$]com
> > *>>> maail = re.sub('\[dot\]|\[\$dot\$\]', '.', maail)
> > *>>> print maail
> > n...@mail.com
> > na...@mail.com
> > na...@mail.com
> > *>>> #How must i write the replace string to replace all this regexp's
> > with just ONE command, in string 'mail' ?
> > *>>> maail = re.sub('^\n|$\n| |\[at\]|\[\$at\$\]|\[dot\]|\[\$dot\$\]',
> > *?*, mail)
> > "

>
> > How must i write that replace pattern (look at question mark), to maek
> > that substituion work? I didn't saw anything helpful while reading Re
> > doc and HowTo (from Python Doc). I tried with 'MatchObject.group()' but
> > something gone wrong - didn't wrote it right.
> > Is there more user friendly HowTo for Python Re, than this?

>
> > I'm new to programming an regexp, sorry for inconvenience.

>
> I don't think you can do it in one regex, nor would I want to. Just use
> the string's replace() method.
>
> *>>> mail = '\nn...@mail.com\nname1 [at] mail [dot] com\nname2 [$at$]
> mail [$dot$] com\n'
> *>>> mail
> '\nn...@mail.com\nname1 [at] mail [dot] com\nname2 [$at$] mail [$dot$]
> com\n'
> *>>> print mail
>
> n...@mail.com
> name1 [at] mail [dot] com
> name2 [$at$] mail [$dot$] com
>
> *>>> maail = mail.strip()
> n...@mail.com
> name1 [at] mail [dot] com
> name2 [$at$] mail [$dot$] com
>
> *>>> maail = maail.replace(' ', '')
> *>>> print maail
> n...@mail.com
> name1[at]mail[dot]com
> name2[$at$]mail[$dot$]com
> *>>> maail = maail.replace('[at]', '@').replace('[$at$]', '@')
> *>>> print maail
> n...@mail.com
> name1@mail[dot]com
> name2@mail[$dot$]com
> *>>> maail = maail.replace('[dot]', '.').replace('[$dot$]', '.')
> *>>> print maail
> n...@mail.com
> na...@mail.com
> na...@mail.com


Too bad, I thought that the almighty re module could do anything, but
it failed with this (or maybe re can do what i want, but only few
people knows how to force him to that? :P).
But with help of MRAB, i choose The 3rd Point of Python's Zen -
"Simple is better than complex."

"
>>> mail = '\nn...@mail.com\nname1 [at] mail [dot] com\nname2 [$at$] mail [$dot$] com\n'
>>> mail


'\nn...@mail.com\nname1 [at] mail [dot] com\nname2 [$at$] mail [$dot$]
com\n'

>>> print mail


n...@mail.com
name1 [at] mail [dot] com
name2 [$at$] mail [$dot$] com

>>> maail = mail.lstrip().rstrip().replace(' ', '').replace('[dot]', '.')..replace('[$dot$]', '.').replace('[at]', '@').replace('[$at$]', '@')
>>> print maail

n...@mail.com
na...@mail.com
na...@mail.com
>>> #Did it :)


"

Thanks again :)

Jon Clements 08-05-2009 11:40 AM

Re: How to write replace string for object which will be substituted?[regexp]
 
On 5 Aug, 07:53, ryniek <rynie...@gmail.com> wrote:
> On 5 Sie, 00:55, MRAB <pyt...@mrabarnett.plus.com> wrote:
>
>
>
> > ryniek90 wrote:
> > > Hi.
> > > I started learning regexp, and some things goes well, but most of them
> > > still not.

>
> > > I've got problem with some regexp. Better post code here:

>
> > > "
> > > *>>> import re
> > > *>>> mail = '\nn...@mail.com\nname1 [at] mail [dot] com\nname2 [$at$]
> > > mail [$dot$] com\n'
> > > *>>> mail
> > > '\nn...@mail.com\nname1 [at] mail [dot] com\nname2 [$at$] mail [$dot$]
> > > com\n'
> > > *>>> print mail

>
> > > n...@mail.com
> > > name1 [at] mail [dot] com
> > > name2 [$at$] mail [$dot$] com

>
> > > *>>> maail = re.sub('^\n|$\n', '', mail)
> > > *>>> print maail
> > > n...@mail.com
> > > name1 [at] mail [dot] com
> > > name2 [$at$] mail [$dot$] com
> > > *>>> maail = re.sub(' ', '', maail)
> > > *>>> print maail
> > > n...@mail.com
> > > name1[at]mail[dot]com
> > > name2[$at$]mail[$dot$]com
> > > *>>> maail = re.sub('\[at\]|\[\$at\$\]', '@', maail)
> > > *>>> print maail
> > > n...@mail.com
> > > name1@mail[dot]com
> > > name2@mail[$dot$]com
> > > *>>> maail = re.sub('\[dot\]|\[\$dot\$\]', '.', maail)
> > > *>>> print maail
> > > n...@mail.com
> > > na...@mail.com
> > > na...@mail.com
> > > *>>> #How must i write the replace string to replace all this regexp's
> > > with just ONE command, in string 'mail' ?
> > > *>>> maail = re.sub('^\n|$\n| |\[at\]|\[\$at\$\]|\[dot\]|\[\$dot\$\]',
> > > *?*, mail)
> > > "

>
> > > How must i write that replace pattern (look at question mark), to maek
> > > that substituion work? I didn't saw anything helpful while reading Re
> > > doc and HowTo (from Python Doc). I tried with 'MatchObject.group()' but
> > > something gone wrong - didn't wrote it right.
> > > Is there more user friendly HowTo for Python Re, than this?

>
> > > I'm new to programming an regexp, sorry for inconvenience.

>
> > I don't think you can do it in one regex, nor would I want to. Just use
> > the string's replace() method.

>
> > *>>> mail = '\nn...@mail.com\nname1 [at] mail [dot] com\nname2 [$at$]
> > mail [$dot$] com\n'
> > *>>> mail
> > '\nn...@mail.com\nname1 [at] mail [dot] com\nname2 [$at$] mail [$dot$]
> > com\n'
> > *>>> print mail

>
> > n...@mail.com
> > name1 [at] mail [dot] com
> > name2 [$at$] mail [$dot$] com

>
> > *>>> maail = mail.strip()
> > n...@mail.com
> > name1 [at] mail [dot] com
> > name2 [$at$] mail [$dot$] com

>
> > *>>> maail = maail.replace(' ', '')
> > *>>> print maail
> > n...@mail.com
> > name1[at]mail[dot]com
> > name2[$at$]mail[$dot$]com
> > *>>> maail = maail.replace('[at]', '@').replace('[$at$]', '@')
> > *>>> print maail
> > n...@mail.com
> > name1@mail[dot]com
> > name2@mail[$dot$]com
> > *>>> maail = maail.replace('[dot]', '.').replace('[$dot$]', '.')
> > *>>> print maail
> > n...@mail.com
> > na...@mail.com
> > na...@mail.com

>
> Too bad, I thought that the almighty re module could do anything, but
> it failed with this (or maybe re can do what i want, but only few
> people knows how to force him to that? *:P).
> But with help of MRAB, i choose The 3rd Point of Python's Zen -
> "Simple is better than complex."
>
> "
>
> >>> mail = '\nn...@mail.com\nname1 [at] mail [dot] com\nname2 [$at$] mail [$dot$] com\n'
> >>> mail

>
> '\nn...@mail.com\nname1 [at] mail [dot] com\nname2 [$at$] mail [$dot$]
> com\n'
>
> >>> print mail

>
> n...@mail.com
> name1 [at] mail [dot] com
> name2 [$at$] mail [$dot$] com
>
> >>> maail = mail.lstrip().rstrip().replace(' ', '').replace('[dot]', '.').replace('[$dot$]', '.').replace('[at]', '@').replace('[$at$]', '@')
> >>> print maail

>
> n...@mail.com
> na...@mail.com
> na...@mail.com
>
> >>> #Did it *:)

>
> "
>
> Thanks again * :)


Short of writing a dedicated function I might be tempted to write this
as:

EMAIL_REPLACEMENTS = (
('[at]', '@'),
('[dot]', '.'),
...
)

for src, dest in EMAIL_REPLACEMENTS:
mail = mail.replace(src, dest)

Apart from taste reasons, it keeps the replaces more obvious (and
accessible via a variable rather than embedded in the code), enables
swapping the order or adding/removing easier.

Jon



All times are GMT. The time now is 01:42 AM.

Powered by vBulletin®. Copyright ©2000 - 2013, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.