正則表達式

正則表達式

正則表達式,regular expression, 縮寫為regex regexp re等
分類:BRE ERE PCRE python使用SRE

基本語法:
元字符metacharactor
. 匹配任意(除換行符)
[xx] 占一位,匹配括號里任一字符
[^x] 占一位,不匹配括號里任一字符
[a-z] 匹配任一位小寫字母
\b 匹配單詞邊界
\B 不匹配單詞的邊界
\d ==[0-9]
\D 匹配一位非數字
\s ==[\f\r\n\t\v]匹配一位空白字符
\S 匹配一位非空白字符
\w 匹配[a-zA-Z0-9_],包括中文的字
\W 匹配\w之外的字符
\ 轉義符號,例如 \\ \. \r \n \[ \]

重復
* 前面的正則表達式 重復0或多次
+ 前面的正則表達式 重復1或多次
?前面的正則表達式 重復0或1次
{n} 前面的正則表達式 重復n次
{n,} 前面的正則表達式 至少重復n次
{n,m} 前面的正則表達式 至少重復n到m次

或匹配
x|y 匹配x或y 長的在前 短的在后
分組 捕獲
(pattern) 自動分組從1開始
\數字 匹配分組 如 (very)\1 捕獲 very very
(?:pattern) 不分組 只改表優先級
(?<name>pattern) 或 (?’name’ exp) 命名分組

斷言
(?=exp) 斷言后面跟著exp
(?<=exp) 斷言前面跟著exp
(?!exp) 斷言后面不是exp
(?<!exp) 斷言前面不是exp

注釋
(?#comment) f(?=oo)(?#這個后斷言不捕獲)

貪婪和非貪婪
*? 匹配任意次 盡可能少重復
+? 匹配至少1次 盡可能少重復
?? 匹配0或1次 盡可能少重復
{n,}? 匹配至少n次 盡可能少重復
{n,m}? 匹配至少n次 至多m次 盡可能少重復

引擎選項
re.I 忽略大小寫
re.M 多行模式 ^行首 $行尾
re.S 單行模式,匹配所有字符包括\n
re.X 忽略表達式中的空白字符,如果要用可以轉義

#Python正則表達式 re模塊
import re

#re.match(pattern, string, flag=0) 只從頭開始

print(re.match(‘www’, ‘awww.runoob.com’))
print(re.match(‘www’, ‘www.runoob.com’).span())

#group(num) groups() 獲取小組,返回元組 group(‘name’)取分組

line = “Mei is a nice girl”

matchObj = re.match(r'(.*) is a (?P<ll>\w+) .*’, line, re.M|re.I)

if matchObj:
print(matchObj.group())
print(matchObj.group(1))
print(matchObj.group(‘ll’))
else:
print(“No match!”)

#re.search(pattern, string, flag=0) 掃描整個字符串返回第一個匹配的

print(re.search(‘www’, ‘www.runoob.com’))
print(re.search(‘com’, ‘www.runoob.com’).span())

#re.sub(pattern, repl, string, count=0, flag=0) 替換
# 參數:
# pattern : 正則中的模式字符串。
# repl : 替換的字符串,也可為一個函數。
# string : 要被查找替換的原始字符串。
# count : 模式匹配后替換的最大次數,默認 0 表示替換所有的匹配。

phone = “2004-959-559 # 這是國外電話”

#刪除字符串中的注釋
print(re.sub(r’#.*$’, ”, phone))

#刪除非數字字符串
print(re.sub(r’\D’,”,phone))

#repl參數是一個函數

def double(matched):
value = int(matched.group(‘value’))
return str(value * 2)

s = ‘A12D5JHK78’
print(re.sub(‘(?P<value>\d+)’, double, s))

#re.compile 編譯正則表達式,給match()和search()使用
# re.compile(pattern[, flags])

pattern = re.compile(r’\d+’)
m = pattern.match(‘one12two’,3)
print(m)
print(m.group())
print(m.start())
print(m.end())
print(m.span())

#findall 匹配所有子串 返回列表
# findall(string[, pos[, endpos]])

pattern = re.compile(r’\d+’)
result1 = pattern.findall(‘gan is 23 tag 45’)
result2 = pattern.findall(‘gan is 23 tag 45’, 0, 10)

print(result1)
print(result2)

#re.finditer 與findall類似,匹配所有子串,返回迭代器
#re.finditer(pattern, string, flag=0)

it = re.finditer(r”\d+”, “12a32bc43jf3″)
print(it)
for match in it:
print(match.group())

#re.split 按照匹配的子串將字符串分割返回列表
#re.split(pattern, string[, maxsplit=0, flags=0])

s = ‘ nike is, a. like/ ‘
print(re.split(‘\W+’, s))

#練習題
#匹配郵箱

emails = ‘test@hot-mail.com is his working-email’
pattern = re.compile(‘\w+[-\.\w]+@[\w-]+(\.[\w-]+)+’)
print(pattern.findall(emails))

#匹配html標記內的內容
alink = ‘<a href=”http://www.baidu.com”>百度</a>’
print(re.findall(‘<[^<>]+>(.*)<[^<>]+>’, alink))

#匹配url
print(re.findall(”’href=[‘”](?P<alink>.*)[‘”]”’, alink))

#匹配二代中國身份證 17位數字+一位檢驗碼
idlist = [
‘321105700101003’,
‘321105197001010030’,
‘11210020170101054X’
]

for id in idlist:
print(re.findall(‘\d{17}[xX\d]|\d{15}’,id)[0])

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/97431

(0)
JacoJaco
上一篇 2018-05-03
下一篇 2018-05-03

相關推薦

  • 遞歸函數

    遞歸函數 def foo(b,b1=3):print(“foo1 called “,b,b1)def foo2(c):foo3(c)print(“foo2 called”,c)def foo3(d):print(“foo3 called”)def mian():print(“…

    2018-04-16
  • 面向對象,魔術方法

    面向對象 一面向對象 什么是面向對象: 一種認識世界、分析世界的方法論。將萬事萬物抽象為類。 類class: 類是抽象的概念,是萬事萬物的抽象,是一類事物的共同集合的集合。 用計算機語言來描述類,就是屬性和方法的集合。 對象instance,object: 對象是類的具象,是一個實體。 每個個體都是抽象類的不同實體。 哲學 一切皆對象 對象是數據和操作的封裝…

    Python筆記 2018-05-14
  • Python內置數據結構——字符串

    知識結構圖 學習筆記 字符串 字符組成的有序序列,字符的集合 使用單引號、雙引號、三引號引起來的字符序列 不可變對象 Unicode類型 定義 單引號、雙引號、三引號 r、R:引號內的字符原樣輸出 元素訪問 索引訪問 可迭代 join連接 “string“.join(iteratable) 使用string作為分隔符將可迭代對象連接起…

    2018-03-31
  • Python 部分知識點總結(二)

    此篇博客只是記錄第四周未掌握或不熟悉的知識點,用來加深印象。

    Python筆記 2018-03-30
  • 日志分析項目

    日志分析

    2018-05-07
  • 解析式

    列表解析式和字典解析式 datetime模塊 對日期,時間,時間戳的處理 datetime類 today()返回本地時區當前的datetime對象 now(tz=None)返回當前時間的datetime對象,時間到微秒,如果tz為None,返回和today()一樣 utcnow()沒有時區的當前時間 fromtimestamp(timestamp,tz=Zo…

    2018-04-09
欧美性久久久久