Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

regular expression : the dollar sign ($) work with re.match() or re.search() ?

52 views
Skip to first unread message

iMath

unread,
Sep 26, 2012, 3:38:50 AM9/26/12
to
I only know the dollar sign ($) will match a pattern from the
end of a string,but which method does it work with ,re.match() or re.search() ?

Jussi Piitulainen

unread,
Sep 26, 2012, 3:48:00 AM9/26/12
to
iMath writes:

> I only know the dollar sign ($) will match a pattern from the end of
> a string, but which method does it work with, re.match() or
> re.search()

It works with both. With re.match, the pattern has to match at the
start of the string _and_ the $ has to match the end of the string (or
a line); re.search scans the string until it finds a suitable start.

What was the weird character that you used as a question mark? I
removed them because they confuse the newsreader I use.

Chris Angelico

unread,
Sep 26, 2012, 3:57:59 AM9/26/12
to pytho...@python.org
On Wed, Sep 26, 2012 at 5:48 PM, Jussi Piitulainen
<jpii...@ling.helsinki.fi> wrote:
> What was the weird character that you used as a question mark? I
> removed them because they confuse the newsreader I use.

It appears to be Unicode Character 'FULLWIDTH QUESTION MARK' (U+FF1F).
Normally I'd be inclined to simply use U+003F instead, but hey, it's a
question mark still.

ChrisA

Peter Otten

unread,
Sep 26, 2012, 4:33:11 AM9/26/12
to pytho...@python.org
Why not try it out in the interactive interpreter? Here's the "deluxe
version":

>>> def demo(pattern="mid$", texts=["start mid end", "start mid", "mid end",
"mid"], matchers=[re.match, re.search]):
... print "pattern:", pattern
... for text in texts:
... for matcher in matchers:
... name = matcher.__name__
... print u"\N{CHECK MARK}" + name if matcher(pattern,
text) else (" "*(len(name)+1)),
... print repr(text)
...
>>> demo()
pattern: mid$
'start mid end'
✓search 'start mid'
'mid end'
✓match ✓search 'mid'


Alister

unread,
Sep 26, 2012, 11:47:46 AM9/26/12
to
It shows fine in my news reader, perhaps you should consider changing to
one that works properly (btw I am using pan on a fedora 17 netbook)



--
Q: Why is Microsoft's Product Support a failure?
A: Because Microsoft needs a Support Group instead.

Jussi Piitulainen

unread,
Sep 26, 2012, 12:29:51 PM9/26/12
to
Alister writes:
> On Wed, 26 Sep 2012 10:48:00 +0300, Jussi Piitulainen wrote:
>
> > iMath writes:
> >
> >> I only know the dollar sign ($) will match a pattern from the end
> >> of a string, but which method does it work with, re.match() or
> >> re.search()
> >
> > It works with both. With re.match, the pattern has to match at the
> > start of the string _and_ the $ has to match the end of the string
> > (or a line); re.search scans the string until it finds a suitable
> > start.
> >
> > What was the weird character that you used as a question mark? I
> > removed them because they confuse the newsreader I use.
>
> It shows fine in my news reader, perhaps you should consider changing to
> one that works properly (btw I am using pan on a fedora 17 netbook)

I was just curious why anyone would use anything other than the ASCII
question mark as an ordinary question mark when writing in English in
a newsgroup.

The post had this:

0000520 61 72 63 68 28 29 20 20 ef bc 9f 0a
a r c h ( ) sp sp o < us nl

od is showing (ef bc 9f) as (o < us) but since they are not individual
characters anyway, never mind that. Google tells me (ef bc 9f) is
UTF-8 for U+FF1F FULLWIDTH QUESTION MARK, so now I basically have my
answer as to what it is, though still not as to why one would use it.

The ordinary question mark would look like this:

0000000 61 72 63 68 28 29 20 3f 0a
a r c h ( ) sp ? nl

Prasad, Ramit

unread,
Sep 28, 2012, 2:07:57 PM9/28/12
to pytho...@python.org
iMath wrote:
> Sent: Wednesday, September 26, 2012 2:39 AM
> To: pytho...@python.org
> Subject: regular expression : the dollar sign ($) work with re.match() or re.search() ?
>
> I only know the dollar sign ($) will match a pattern from the
> end of a string,but which method does it work with ,re.match() or re.search() ?


You can try this on the interactive interpreter.
>>> re.match('hi$', 'xihi')
>>> re.search('hi$', 'xihi')
<_sre.SRE_Match object at 0x13FF7100>

Although, I think match does not work since match
only starts searching at the start of the string
while search looks for the pattern anywhere in the string.

>>> re.match('x.hi$', 'xihi')
<_sre.SRE_Match object at 0x15693BF0>

I guess you can consider re.match's pattern to be
prefixed with '^'.

This email is confidential and subject to important disclaimers and
conditions including on offers for the purchase or sale of
securities, accuracy and completeness of information, viruses,
confidentiality, legal privilege, and legal entity disclaimers,
available at http://www.jpmorgan.com/pages/disclosures/email.

Ian Kelly

unread,
Sep 28, 2012, 2:32:07 PM9/28/12
to Python
On Fri, Sep 28, 2012 at 12:07 PM, Prasad, Ramit
<ramit....@jpmorgan.com> wrote:
> I guess you can consider re.match's pattern to be
> prefixed with '^'.

You can in this case, but they're not equivalent in multi-line mode:

>>> re.match('^two', 'one\ntwo', re.M)
>>> re.search('^two', 'one\ntwo', re.M)
<_sre.SRE_Match object at 0x0475BFA8>

iMath

unread,
Jan 7, 2013, 4:45:58 AM1/7/13
to
在 2012年9月26日星期三UTC+8下午3时38分50秒,iMath写道:
> I only know the dollar sign ($) will match a pattern from the
>
> end of a string,but which method does it work with ,re.match() or re.search() ?

I thought re.match('h.$', 'hbxihi') will match ‘hi’ ,but it does not .so why ?

Steven D'Aprano

unread,
Jan 7, 2013, 4:54:24 AM1/7/13
to
re.match only matches at the *start* of the string, so "h.$" tries to
match:

* start of string
* literal h
* any character
* end of string


You want re.search, which will search the entire string and match "hi" at
the end of the string.


--
Steven
0 new messages