最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python正則表達(dá)式實(shí)例代碼

 更新時(shí)間:2020年03月03日 18:58:13   作者:jihite  
這篇文章主要介紹了python正則表達(dá)式的一些實(shí)例代碼,方便學(xué)習(xí)python的朋友,需要的朋友可以參考下

re 模塊使 Python 語言擁有全部的正則表達(dá)式功能。

會(huì)用到的語法

正則字符 釋義 舉例
+ 前面元素至少出現(xiàn)一次 ab+:ab、abbbb 等
* 前面元素出現(xiàn)0次或多次 ab*:a、ab、abb 等
? 匹配前面的一次或0次 Ab?: A、Ab 等
^ 作為開始標(biāo)記 ^a:abc、aaaaaa等
$ 作為結(jié)束標(biāo)記 c$:abc、cccc 等
\d 數(shù)字 3、4、9 等
正則字符 釋義 舉例
+ 前面元素至少出現(xiàn)一次 ab+:ab、abbbb 等
* 前面元素出現(xiàn)0次或多次 ab*:a、ab、abb 等
? 匹配前面的一次或0次 Ab?: A、Ab 等
^ 作為開始標(biāo)記 ^a:abc、aaaaaa等
$ 作為結(jié)束標(biāo)記 c$:abc、cccc 等
\d 數(shù)字 3、4、9 等
\D 非數(shù)字 A、a、- 等
[a-z] A到z之間的任意字母 a、p、m 等
[0-9] 0到9之間的任意數(shù)字 0、2、9 等
\D 非數(shù)字 A、a、- 等
[a-z] A到z之間的任意字母 a、p、m 等
[0-9] 0到9之間的任意數(shù)字 0、2、9 等

注意:

1. 轉(zhuǎn)義字符

>>> s
'(abc)def'
>>> m = re.search("(\(.*\)).*", s)
>>> print m.group(1)
(abc)

re.match函數(shù)

re.match 嘗試從字符串的起始位置匹配一個(gè)模式,如果不是起始位置匹配成功的話,match()就返回none。

實(shí)例1:

#!/usr/bin/python
# -*- coding: UTF-8 -*- 
 
import re
print(re.match('www', 'www.fzitv.net').span()) # 在起始位置匹配
print(re.match('net', 'www.fzitv.net'))     # 不在起始位置匹配

輸出結(jié)果:

(0, 3)
None

實(shí)例2:

#!/usr/bin/python
import re
 
line = "Cats are smarter than dogs"
 
matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)
 
if matchObj:
  print "matchObj.group() : ", matchObj.group()
  print "matchObj.group(1) : ", matchObj.group(1)
  print "matchObj.group(2) : ", matchObj.group(2)
else:
  print "No match!!"

輸出結(jié)果:

matchObj.group() : Cats are smarter than dogs
matchObj.group(1) : Cats
matchObj.group(2) : smarter

上面是python2的print輸出,python記得加()即可,python輸出類似的別的語言的\n之類來匹配獲取的內(nèi)容。

python group()

正則表達(dá)式中,group()用來提出分組截獲的字符串,()用來分組

重復(fù)前邊的字串多次

>>> a = "kdlal123dk345"
>>> b = "kdlal123345"
>>> m = re.search("([0-9]+(dk){0,1})[0-9]+", a)
>>> m.group(1), m.group(2)
('123dk', 'dk')
>>> m = re.search("([0-9]+(dk){0,1})[0-9]+", b)
>>> m.group(1)
'12334'
>>> m.group(2)
>>>

究其因

1. 正則表達(dá)式中的三組括號(hào)把匹配結(jié)果分成三組

group() 同group(0)就是匹配正則表達(dá)式整體結(jié)果
group(1) 列出第一個(gè)括號(hào)匹配部分,group(2) 列出第二個(gè)括號(hào)匹配部分,group(3) 列出第三個(gè)括號(hào)匹配部分。
2. 沒有匹配成功的,re.search()返回None

3. 當(dāng)然正則表達(dá)式中沒有括號(hào),group(1)肯定不對(duì)了。

示例

1. 判斷字符串是否是全部小寫

# -*- coding: cp936 -*-
import re 
s1 = 'adkkdk'
s2 = 'abc123efg'

an = re.search('^[a-z]+$', s1)
if an:
  print 's1:', an.group(), '全為小寫' 
else:
  print s1, "不全是小寫!"

an = re.match('[a-z]+$', s2)
if an:
  print 's2:', an.group(), '全為小寫' 
else:
  print s2, "不全是小寫!"

結(jié)果

究其因

1. 正則表達(dá)式不是python的一部分,利用時(shí)需要引用re模塊

2. 匹配的形式為: re.search(正則表達(dá)式, 帶匹配字串)或re.match(正則表達(dá)式, 帶匹配字串)。兩者區(qū)別在于后者默認(rèn)以開始符(^)開始。因此,

re.search('^[a-z]+$', s1) 等價(jià)于 re.match('[a-z]+$', s2)

3. 如果匹配失敗,則an = re.search('^[a-z]+$', s1)返回None

group用于把匹配結(jié)果分組

例如

import re
a = "123abc456"
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(0)  #123abc456,返回整體
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(1)  #123
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(2)  #abc
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(3)  #456

輸出結(jié)果

123abc456
123
abc
456

1)正則表達(dá)式中的三組括號(hào)把匹配結(jié)果分成三組

  group() 同group(0)就是匹配正則表達(dá)式整體結(jié)果

  group(1) 列出第一個(gè)括號(hào)匹配部分,group(2) 列出第二個(gè)括號(hào)匹配部分,group(3) 列出第三個(gè)括號(hào)匹配部分。

2)沒有匹配成功的,re.search()返回None

3)當(dāng)然正則表達(dá)式中沒有括號(hào),group(1)肯定不對(duì)了。

2. 首字母縮寫詞擴(kuò)充

具體示例

FEMA Federal Emergency Management Agency
IRA Irish Republican Army
DUP Democratic Unionist Party

FDA Food and Drug Administration
OLC Office of Legal Counsel
分析

縮寫詞  FEMA
分解為  F*** E*** M*** A***
規(guī)律   大寫字母 + 小寫(大于等于1個(gè))+ 空格

參考代碼

import re
def expand_abbr(sen, abbr):
  lenabbr = len(abbr)
  ma = '' 
  for i in range(0, lenabbr):
    ma += abbr[i] + "[a-z]+" + ' '
  print 'ma:', ma
  ma = ma.strip(' ')
  p = re.search(ma, sen)
  if p:
    return p.group()
  else:
    return ''

print expand_abbr("Welcome to Algriculture Bank China", 'ABC')

結(jié)果

問題

上面代碼對(duì)于例子中的前3個(gè)是正確的,但是后面的兩個(gè)就錯(cuò)了,因?yàn)榇髮懽帜搁_頭的詞語之間還夾雜著小寫字母詞

規(guī)律

大寫字母 + 小寫(大于等于1個(gè))+ 空格 + [小寫+空格](0次或1次)

參考代碼

import re
def expand_abbr(sen, abbr):
  lenabbr = len(abbr)
  ma = '' 
  for i in range(0, lenabbr-1):
    ma += abbr[i] + "[a-z]+" + ' ' + '([a-z]+ )?'
  ma += abbr[lenabbr-1] + "[a-z]+"
  print 'ma:', ma
  ma = ma.strip(' ')
  p = re.search(ma, sen)
  if p:
    return p.group()
  else:
    return ''

print expand_abbr("Welcome to Algriculture Bank of China", 'ABC')

技巧

中間的 小寫字母集合+一個(gè)空格,看成一個(gè)整體,就加個(gè)括號(hào)。要么同時(shí)有,要么同時(shí)沒有,這樣需要用到?,匹配前方的整體。

3. 去掉數(shù)字中的逗號(hào)

具體示例

在處理自然語言時(shí)123,000,000如果以標(biāo)點(diǎn)符號(hào)分割,就會(huì)出現(xiàn)問題,好好的一個(gè)數(shù)字就被逗號(hào)肢解了,因此可以先下手把數(shù)字處理干凈(逗號(hào)去掉)。

分析

數(shù)字中經(jīng)常是3個(gè)數(shù)字一組,之后跟一個(gè)逗號(hào),因此規(guī)律為:***,***,***

正則式

[a-z]+,[a-z]?

參考代碼3-1

import re

sen = "abc,123,456,789,mnp"
p = re.compile("\d+,\d+?")

for com in p.finditer(sen):
  mm = com.group()
  print "hi:", mm
  print "sen_before:", sen
  sen = sen.replace(mm, mm.replace(",", ""))
  print "sen_back:", sen, '\n'

結(jié)果

技巧

使用函數(shù)finditer(string[, pos[, endpos]]) | re.finditer(pattern, string[, flags]):

搜索string,返回一個(gè)順序訪問每一個(gè)匹配結(jié)果(Match對(duì)象)的迭代器。

參考代碼3-2

sen = "abc,123,456,789,mnp"
while 1:
  mm = re.search("\d,\d", sen)
  if mm:
    mm = mm.group()
    sen = sen.replace(mm, mm.replace(",", ""))
    print sen
  else:
    break

結(jié)果

延伸

這樣的程序針對(duì)具體問題,即數(shù)字3位一組,如果數(shù)字混雜與字母間,干掉數(shù)字間的逗號(hào),即把“abc,123,4,789,mnp”轉(zhuǎn)化為“abc,1234789,mnp”

思路

更具體的是找正則式“數(shù)字,數(shù)字”找到后用去掉逗號(hào)的替換

參考代碼3-3

sen = "abc,123,4,789,mnp"
while 1:
  mm = re.search("\d,\d", sen)
  if mm:
    mm = mm.group()
    sen = sen.replace(mm, mm.replace(",", ""))
    print sen
  else:
    break
print sen

結(jié)果

4. 中文處理之年份轉(zhuǎn)換(例如:一九四九年--->1949年)

中文處理涉及到編碼問題。例如下邊的程序識(shí)別年份(****年)時(shí)

# -*- coding: cp936 -*-
import re
m0 = "在一九四九年新中國(guó)成立"
m1 = "比一九九零年低百分之五點(diǎn)二"
m2 = '人一九九六年擊敗俄軍,取得實(shí)質(zhì)獨(dú)立'

def fuc(m):
  a = re.findall("[零|一|二|三|四|五|六|七|八|九]+年", m)
  if a:
    for key in a:
      print key
  else:
    print "NULL"

fuc(m0)
fuc(m1)
fuc(m2)

運(yùn)行結(jié)果

可以看出第二個(gè)、第三個(gè)都出現(xiàn)了錯(cuò)誤。

改進(jìn)——準(zhǔn)化成unicode識(shí)別

# -*- coding: cp936 -*-
import re
m0 = "在一九四九年新中國(guó)成立"
m1 = "比一九九零年低百分之五點(diǎn)二"
m2 = '人一九九六年擊敗俄軍,取得實(shí)質(zhì)獨(dú)立'

def fuc(m):
  m = m.decode('cp936')
  a = re.findall(u"[\u96f6|\u4e00|\u4e8c|\u4e09|\u56db|\u4e94|\u516d|\u4e03|\u516b|\u4e5d]+\u5e74", m)

  if a:
    for key in a:
      print key
  else:
    print "NULL"

fuc(m0)
fuc(m1)
fuc(m2)

結(jié)果

識(shí)別出來可以通過替換方式,把漢字替換成數(shù)字。

參考

numHash = {}
numHash['零'.decode('utf-8')] = '0'
numHash['一'.decode('utf-8')] = '1'
numHash['二'.decode('utf-8')] = '2'
numHash['三'.decode('utf-8')] = '3'
numHash['四'.decode('utf-8')] = '4'
numHash['五'.decode('utf-8')] = '5'
numHash['六'.decode('utf-8')] = '6'
numHash['七'.decode('utf-8')] = '7'
numHash['八'.decode('utf-8')] = '8'
numHash['九'.decode('utf-8')] = '9'

def change2num(words):
  print "words:",words
  newword = ''
  for key in words:
    print key
    if key in numHash:
      newword += numHash[key]
    else:
      newword += key
  return newword

def Chi2Num(line):
  a = re.findall(u"[\u96f6|\u4e00|\u4e8c|\u4e09|\u56db|\u4e94|\u516d|\u4e03|\u516b|\u4e5d]+\u5e74", line)
  if a:
    print "------"
    print line
    for words in a:
      newwords = change2num(words)
      print words
      print newwords
      line = line.replace(words, newwords)
  return line

5. 多個(gè)手機(jī)號(hào)碼,中間用|隔開

舉例:

空值
12222222222
12222222222|12222222222
12222222222|12222222222|12222222444

表達(dá)式

s = "[\\d]{11}(\\|[\\d]{11})*|"

四. 推薦

Python正則表達(dá)式指南

到此這篇關(guān)于python正則表達(dá)式實(shí)例代碼的文章就介紹到這了,更多相關(guān)python正則例子內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在vscode中啟動(dòng)conda虛擬環(huán)境的思路詳解

    在vscode中啟動(dòng)conda虛擬環(huán)境的思路詳解

    這篇文章主要介紹了在vscode中啟動(dòng)conda虛擬環(huán)境的思路詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • odoo字段訪問控制的操作方法

    odoo字段訪問控制的操作方法

    在 Odoo 中,可以通過幾種方式實(shí)現(xiàn)字段的訪問控制?0c;包括通過模型安全規(guī)則、記錄規(guī)則和字段屬性來限制字段的訪問,這篇文章主要介紹了odoo字段訪問控制的相關(guān)操作,感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • 關(guān)于SSD目標(biāo)檢測(cè)模型的人臉口罩識(shí)別

    關(guān)于SSD目標(biāo)檢測(cè)模型的人臉口罩識(shí)別

    這篇文章主要介紹了關(guān)于SSD目標(biāo)檢測(cè)模型的人臉口罩識(shí)別問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • python實(shí)現(xiàn)串口通信的示例代碼

    python實(shí)現(xiàn)串口通信的示例代碼

    這篇文章主要介紹了python實(shí)現(xiàn)串口通信的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • 使用PyOpenGL繪制三維坐標(biāo)系實(shí)例

    使用PyOpenGL繪制三維坐標(biāo)系實(shí)例

    今天小編就為大家分享一篇使用PyOpenGL繪制三維坐標(biāo)系實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • python如何實(shí)現(xiàn)excel數(shù)據(jù)添加到mongodb

    python如何實(shí)現(xiàn)excel數(shù)據(jù)添加到mongodb

    本文介紹了python是如何實(shí)現(xiàn)excel數(shù)據(jù)添加到mongodb,為了將數(shù)據(jù)導(dǎo)入mongodb,引入了pymongo,xlrd包,需要的朋友可以參考下
    2015-07-07
  • Python優(yōu)雅實(shí)現(xiàn)二分查找的示例詳解

    Python優(yōu)雅實(shí)現(xiàn)二分查找的示例詳解

    二分查找是一種高效的搜索算法,用于在有序數(shù)組中查找特定元素,本文將介紹二分查找的基本原理,并通過Python代碼進(jìn)行詳細(xì)講解,需要的可以參考一下
    2023-07-07
  • Python中request庫(kù)的各種用法詳細(xì)解析

    Python中request庫(kù)的各種用法詳細(xì)解析

    本文詳細(xì)介紹了Python的requests庫(kù)的安裝與使用,包括HTTP請(qǐng)求方法、請(qǐng)求頭、請(qǐng)求體的基本概念,以及發(fā)送GET和POST請(qǐng)求的基本用法,同時(shí),探討了會(huì)話對(duì)象、處理重定向、超時(shí)設(shè)置、代理支持等高級(jí)功能,幫助讀者更高效地處理復(fù)雜的HTTP請(qǐng)求場(chǎng)景,需要的朋友可以參考下
    2024-10-10
  • python中退出多層循環(huán)的方法

    python中退出多層循環(huán)的方法

    這篇文章主要介紹了python中退出多層循環(huán)的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-11-11
  • 如何使用python中的networkx來生成一個(gè)圖

    如何使用python中的networkx來生成一個(gè)圖

    這篇文章主要介紹了如何使用python中的networkx來生成一個(gè)圖,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12

最新評(píng)論

宽城| 南乐县| 蒲江县| 寿阳县| 华亭县| 栾川县| 天津市| 台江县| 长葛市| 台南市| 东明县| 彰化市| 通城县| 乌鲁木齐县| 忻州市| 南华县| 铜鼓县| 思南县| 仙游县| 本溪| 尉氏县| 五峰| 施甸县| 吴堡县| 海林市| 上杭县| 象州县| 西昌市| 盐源县| 西充县| 宾川县| 岳池县| 呈贡县| 南岸区| 新化县| 衡山县| 桓台县| 铜陵市| 泉州市| 登封市| 团风县|