RegEx Pattern Matching: Difference between revisions
From NoSQLZoo
No edit summary |
No edit summary |
||
| Line 99: | Line 99: | ||
<div class=q data-lang="py3"> | <div class=q data-lang="py3"> | ||
Bahamas has three <b>a</b>, who else?<br/> | Bahamas has three <b>a</b>, who else?<br/> | ||
<p class=strong>Find the | <p class=strong>Find the country that has three or more a in the name</p> | ||
<pre class=def> | <pre class=def> | ||
pp.pprint(list( | pp.pprint(list( | ||
Revision as of 18:43, 15 July 2015
#ENCODING
import io
import sys
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-16')
#MONGO
from pymongo import MongoClient
client = MongoClient()
client.progzoo.authenticate('scott','tiger')
db = client['progzoo']
#PRETTY
import pprint
pp = pprint.PrettyPrinter(indent=4)
Pattern Matching String
This tutorial uses RegEx to check names. We will be using find() on the collection world.
You can use '$regex':"^B" to get all the countries that start with B.
Find the countries that start with Y
pp.pprint(list(
db.world.find({"name":{'$regex':"^F"}},{"name":1,"_id":0})
))
pp.pprint(list(db.world.find({"name":{'$regex':"^Y"}},{"name":1,"_id":0})))
You can use '$regex':"a$" to get all the countries that end with a.
Find the countries that end with Y
pp.pprint(list(
db.world.find({"name":{'$regex':"l$"}},{"name":1,"_id":0})
))
pp.pprint(list(db.world.find({"name":{'$regex':"y$"}},{"name":1,"_id":0})))
Luxembourg has an x, so does one other country, list them both
Find the countries that contain the letter x
pp.pprint(list(
db.world.find({"name":{'$regex':"ana"}},{"name":1,"_id":0})
))
pp.pprint(list(db.world.find({"name":{'$regex':"x"}},{"name":1,"_id":0})))
Iceland and Switzerland end with land but where are the others?
Find the countries that end with land
pp.pprint(list(
db.world.find({"name":{'$regex':"stan$"}},{"name":1,"_id":0})
))
pp.pprint(list(db.world.find({"name":{'$regex':"land$"}},{"name":1,"_id":0})))
Columbia starts with a C and ends with ia - there are two other countries like this.
You can use .* to match any character except newlines.
Find the countries that start with C and end with ia
pp.pprint(list(
db.world.find({"name":{'$regex':"^A.*n$"}},{"name":1,"_id":0})
))
pp.pprint(list(db.world.find({"name":{'$regex':"^C.*ia$"}},{"name":1,"_id":0})))
Greece has a double e, who has a double o
Find the countty that has oo in its name
pp.pprint(list(
db.world.find({"name":{'$regex':"ee"}},{"name":1,"_id":0})
))
pp.pprint(list(db.world.find({"name":{'$regex':"oo"}},{"name":1,"_id":0})))
Bahamas has three a, who else?
Find the country that has three or more a in the name
pp.pprint(list(
db.world.find({"name":{'$regex':"^T"}},{"name":1,"_id":0})
))
pp.pprint(list(db.world.find({"name":{'$regex':"(.*[aA].*){3}"}},{"name":1,"_id":0})))