日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

文本处理常用方法

發布時間:2023/12/10 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 文本处理常用方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

匹配模式字符串不要有任何空格和變量,重要!重要!重要!

re

準備正則表達式

  • 在正則表達式中,如果直接給出字符,就是精確匹配。
    \d 可以匹配一個數字
    \W 匹配非字母數字及下劃線
    \w 可以匹配一個字母或數字
    \s 空格
  • 要匹配變長的字符,在正則表達式中,用*表示任意個字符(包括0個),用+表示至少一個字符,用?表示0個或1個字符,用{n}表示n個字符,用{n,m}表示n-m個字符:
    例:\d{3}\s+\d{3,8}
    表示的意思:\d{3}表示匹配3個數字,例如’010’;\s可以匹配一個空格(也包括Tab等空白符),所以\s+表示至少有一個空格,例如匹配’ ‘,’ ‘等;\d{3,8}表示3-8個數字,例如’1234567’
re.match(r'\d{3}\-\d{3,8}', '021-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'了。 re.match(r'py', 'python') Out[10]: <re.Match object; span=(0, 2), match='py'> # 例子 >>> import re >>> re.match(r'^\d{3}\-\d{3,8}$', '010-12345') <_sre.SRE_Match object; span=(0, 9), match='010-12345'> >>> re.match(r'^\d{3}\-\d{3,8}$', '010 12345') >>>

search

re.search 掃描整個字符串并返回第一個成功的匹配

""" 語法 re.search(pattern, string, flags=0) pattern 匹配的正則表達式 string 要匹配的字符串。 flags 標志位,用于控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等。 匹配成功re.search方法返回一個匹配的對象,否則返回None。我們可以使用group(num) 或 groups() 匹配對象函數來獲取匹配表達式。 """ #!/usr/bin/python import reline = "Cats are smarter than dogs";searchObj = re.search( r'(.*) are (.*?) .*', line, re.M|re.I)if searchObj:print "searchObj.group() : ", searchObj.group()print "searchObj.group(1) : ", searchObj.group(1)print "searchObj.group(2) : ", searchObj.group(2) else:print "Nothing found!!"

match

re.match只匹配字符串的開始,如果字符串開始不符合正則表達式,則匹配失敗,函數返回None;而re.search匹配整個字符串,直到找到一個匹配。

#!/usr/bin/python import reline = "Cats are smarter than dogs";matchObj = re.match( r'dogs', line, re.M|re.I) if matchObj:print "match --> matchObj.group() : ", matchObj.group() else:print "No match!!"matchObj = re.search( r'dogs', line, re.M|re.I) if matchObj:print "search --> searchObj.group() : ", matchObj.group() else:print "No match!!"

sub

Python 的 re 模塊提供了re.sub用于替換字符串中的匹配項。

""" 語法:re.sub(pattern, repl, string, count=0, flags=0) 參數:pattern : 正則中的模式字符串。 repl : 替換的字符串,也可為一個函數。 string : 要被查找替換的原始字符串。 count : 模式匹配后替換的最大次數,默認 0 表示替換所有的匹配。 """ #!/usr/bin/python # -*- coding: UTF-8 -*-import rephone = "2004-959-559 # 這是一個國外電話號碼"# 刪除字符串中的 Python注釋 num = re.sub(r'#.*$', "", phone) print "電話號碼是: ", num# 刪除非數字(-)的字符串 num = re.sub(r'\D', "", phone) print "電話號碼是 : ", num 以上實例執行結果如下: 電話號碼是: 2004-959-559 電話號碼是 : 2004959559 re.sub(r'^[0]{1,100}', '', test) #去掉開頭的0

split

re.split
split 方法按照能夠匹配的子串將字符串分割后返回列表,它的使用形式如下:

""" re.split(pattern, string[, maxsplit=0, flags=0]) 參數:參數 描述 pattern 匹配的正則表達式 string 要匹配的字符串。 maxsplit 分隔次數,maxsplit=1 分隔一次,默認為 0,不限制次數。 flags 標志位,用于控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等。參見:正則表達式修飾符 - 可選標志 """ import re s='abc, abc, defg, dds' re.split('(\W+)',s) result:['abc', ', ', 'abc', ', ', 'defg', ', ', 'dds'] 說明:\W匹配任何非單詞字符import re s='abc, abc, defg, dds' re.split('(\W+)',s) ['abc', ', ', 'abc', ', ', 'defg', ', ', 'dds'] 說明:如果加上括號,結果會同時返回去掉的值

string

split

不支持正則及多個切割符號,不感知空格的數量,比如用空格切割,會出現下面情況。

>>> s1="aa bb cc" >>> s1.split(' ') ['aa', 'bb', '', 'cc']

spritlines

Python splitlines() 按照行(’\r’, ‘\r\n’, \n’)分隔,返回一個包含各行作為元素的列表,如果參數 keepends 為 False,不包含換行符,如果為 True,則保留換行符。

str1 = 'ab c\n\nde fg\rkl\r\n' print str1.splitlines();str2 = 'ab c\n\nde fg\rkl\r\n' print str2.splitlines(True)['ab c', '', 'de fg', 'kl'] ['ab c\n', '\n', 'de fg\r', 'kl\r\n']

strip

Python strip() 方法用于移除字符串頭尾指定的字符(默認為空格或換行符)或字符序列。

注意:該方法只能刪除開頭或是結尾的字符,不能刪除中間部分的字符。

# re.match(pattern, string, flags=0) #!/usr/bin/python # -*- coding: UTF-8 -*-str = "00000003210Runoob01230000000"; print str.strip( '0' ); # 去除首尾字符 0str2 = " Runoob "; # 去除首尾空格 print str2.strip(); result: 3210Runoob0123 Runoob# 只要頭尾包含有指定字符序列中的字符就刪除: #!/usr/bin/python # -*- coding: UTF-8 -*-str = "123abcrunoob321" print (str.strip( '12' )) # 字符序列為 12 3abcrunoob3

re.search().group()

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# 原文鏈接:https://blog.csdn.net/sinat_20174131/article/details/77769309

正則表達式中的三組括號把匹配結果分成三組

group() 同group(0)就是匹配正則表達式整體結果 group(1) 列出第一個括號匹配部分,group(2) 列出第二個括號匹配部分,group(3) 列出第三個括號匹配部分。

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

總結

以上是生活随笔為你收集整理的文本处理常用方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。