正則表達式

正則表達式是一種用來匹配字符串的強有力的武器。它的設計思想是用一種描述性的語言來給字符串定義一個規則,凡是符合規則的字符串,咱們就認爲它「匹配」了,不然,該字符串就是不合法的。python

因此咱們判斷一個字符串是不是合法的Email的方法是:正則表達式

  1. 建立一個匹配Email的正則表達式;設計

  2. 用該正則表達式去匹配用戶的輸入來判斷是否合法。

在正則表達式中,若是直接給出字符,就是精確匹配。用\d能夠匹配一個數字,\w能夠匹配一個字母或數字,因此:code

  • '00\d'能夠匹配'007',但沒法匹配'00A'字符串

  • '\d\d\d'能夠匹配'010'變量

  • '\w\w\d'能夠匹配'py3'進階

.能夠匹配任意字符,因此:方法

  • 'py.'能夠匹配'pyc''pyo''py!'等等。

要匹配變長的字符,在正則表達式中,用*表示任意個字符(包括0個),用+表示至少一個字符,用?表示0個或1個字符,用{n}表示n個字符,用{n,m}表示n-m個字符:語言

來看一個複雜的例子:\d{3}\s+\d{3,8}mail

咱們來從左到右解讀一下:

  1. \d{3}表示匹配3個數字,例如'010'

  2. \s能夠匹配一個空格(也包括Tab等空白符),因此\s+表示至少有一個空格,例如匹配' '' '等;

  3. \d{3,8}表示3-8個數字,例如'1234567'

綜合起來,上面的正則表達式能夠匹配以任意個空格隔開的帶區號的電話號碼。

若是要匹配'010-12345'這樣的號碼呢?因爲'-'是特殊字符,在正則表達式中,要用'\'轉義,因此,上面的正則是\d{3}\-\d{3,8}

可是,仍然沒法匹配'010 - 12345',由於帶有空格。因此咱們須要更復雜的匹配方式。

進階

要作更精確地匹配,能夠用[]表示範圍,好比:

  • [0-9a-zA-Z\_]能夠匹配一個數字、字母或者下劃線;

  • [0-9a-zA-Z\_]+能夠匹配至少由一個數字、字母或者下劃線組成的字符串,好比'a100''0_Z''Py3000'等等;

  • [a-zA-Z\_][0-9a-zA-Z\_]*能夠匹配由字母或下劃線開頭,後接任意個由一個數字、字母或者下劃線組成的字符串,也就是Python合法的變量;

  • [a-zA-Z\_][0-9a-zA-Z\_]{0, 19}更精確地限制了變量的長度是1-20個字符(前面1個字符+後面最多19個字符)。

A|B能夠匹配A或B,因此(P|p)ython能夠匹配'Python'或者'python'

^表示行的開頭,^\d表示必須以數字開頭。

$表示行的結束,\d$表示必須以數字結束。

你可能注意到了,py也能夠匹配'python',可是加上^py$就變成了整行匹配,就只能匹配'py'了。

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息