国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

正則表達式

whlong / 1696人閱讀

摘要:掃描字符串開頭掃描整個字符串,返回第一個匹配成功的結果返回所有結果的列表,失敗返回空列表返回迭代器失敗返回空比如是否區分大小寫。

match search findall finditer
re.match(pattern, string[, flags]):掃描字符串開頭
re.search(): 掃描整個字符串,返回第一個匹配成功的結果
re.findall():返回所有結果的列表,失敗返回空列表
finditer() 返回迭代器 失敗返回空

flags 比如是否區分大小寫。
re.I:忽略大小寫 ignorecase
re.M:多行匹配 會影響$和^ multiline
re.S:會匹配包括換行符在內的所有字符 # DOTALL dot matches all

import re
tmp = "http"
print(re.match(tmp,"http://www.baidu.com")) 
# <_sre.SRE_Match object; span=(0, 4), match="http">
print(re.match(tmp,"://wwwhttp.baidu.com")) 
# None
print(re.match(tmp,"http://www.baidu.com").span())
# (0, 4)

print(re.search(tmp, "www.Http://baidu.com", re.I))
# <_sre.SRE_Match object; span=(4, 8), match="Http">

print(re.findall(tmp, "http://www.http.com"))
# ["http", "http"]

find = re.finditer(tmp, "http://HTTp.com0", re.I)
for i in find:
    print(i)
# <_sre.SRE_Match object; span=(0, 4), match="http">
# <_sre.SRE_Match object; span=(7, 11), match="HTTp">

各種匹配符號

· 匹配除換行符以外的所有字符

[] 是字符的集合,匹配括號中任意字符

[a-zA-Z] 大小寫字符

[0-9]

[^0-9]除數字外的所有字符 ^托字符

d 匹配數字,效果等同于[0-9]

D 匹配除數字以外的字符 [^0-9]

w 匹配數字,字母及下劃線 效果等同于[0-9a-zA-Z_]

W 取反

s 匹配任意空白字符(空格,換行,制表,換頁,回車)[ntfr]

S 取反

print(re.findall(".","http:
//"))
# ["h", "t", "t", "p", ":", "/", "/"]
print(re.findall("[12345]","qhchg461905nkj"))  
# ["4", "1", "5"]


# 保留原始字符的R/r在正則中無效
print(re.findall(r"D","123qwr"))
# ["q", "w", "r"]

print(re.findall("S","123 gh 
 78
"))
# ["1", "2", "3", "g", "h", "7", "8"]

^ 行首匹配(不在方括號內)

$ 行尾匹配(不在方括號內)當需要進行多行匹配時候,需要設置flags=re.M,如果不寫默認匹配字符串的開頭和結尾 只匹配一次

A 行首匹配 與^的區別:A只匹配整個字符串的開頭,即使有flags = re.M參數也不會匹配其他的行首

Z 行尾匹配 與$的區別:Z只匹配整個字符串的結尾,即使有flags = re.M參數也不會匹配其他的行尾

b 匹配字符邊界 就是字符串與空格間的位置,比如"ce",可以匹配nice 不能匹配nicer

B 匹配非字符邊界

# 看你是否nice開始 類似于match
print(re.findall("^nice","to nice meet you"))
# []

# 多行開頭匹配
print(re.findall("^nice","nice to meet you
nice to meet you", re.M))
# ["nice", "nice"]

# 是否是com結尾
print(re.findall("com$", "http:baidu.com"))
# ["com"]

#  本身是個轉義字符,但在正則中也有特殊意義,在正則字符串前面加r
# 將將轉義字符的意義去掉 保留正則的意義
# 以空格有邊界的有一個ce
print(re.findall(r"ce", "nice to meet niceto meet"))
# ["ce"]

(abc) 匹配小括號中的字符作為整體

x? ? 匹配0或1個x字符 非貪婪匹配

x+ + 匹配至少一個x 貪婪匹配

x* * 匹配任意多個x 貪婪匹配

x{n} 匹配確定的n個x 非負整數

x{n,} 匹配大于等于n個x

x{n,m} 匹配至少n個x,最多m個

x|y 匹配x或y

print(re.findall("[abc]", "qwracb"))
# ["a", "c", "b"]

print(re.findall("(abc)", "qwrabc"))
# ["abc"]

print(re.findall("a?","a"))
# ["a", ""]

print(re.findall("(aa)?", "aaab"))
# ["aa", "", "", ""]

print(re.findall("(aa)","aaaab"))
# ["aa", "aa"]
print(re.findall("(aa)+","aaaab"))  
# 由于是貪婪匹配,相當于在最長的aaaa中找出: ["aa"]

print(re.findall("aa+","aabaaaabaaaba")) 
# 最后一個a沒 ["aa", "aaaa", "aaa"]

print(re.findall("a*", "abaabbaaabaaaabb"))
# 匹配任意多個a
# ["a", "", "aa", "", "", "aaa", "", "aaaa", "", "", ""]

print(re.findall("a{3}","aabaaacsdsaaa"))
# ["aaa", "aaa"]
print(re.findall("a{3,}","aabbaaabbaaaa"))
# ["aaa", "aaaa"]

print(re.findall("(good)","good--Good-good"))
print(re.findall("good","good--Good-good"))
# ["good", "good"]

print(re.findall("(good)|(Good)","good--Good"))
# [("good", ""), ("", "Good")]
print(re.findall("good|Good","good--Good"))
# ["good", "Good"]
特殊元字符
.   匹配除換行符以為的所有字符
* 匹配任意多個 貪婪匹配
? 匹配0個或一個
.*? 將貪婪匹配變為非貪婪
print(re.findall(".",""))
# []
print(re.findall(".*",""))  
# [""]

r = "who .* he"
print(re.findall(r, "who is a girl he who is boy he "))
# ["who is a girl he who is boy he"] 貪婪

r = "who .*? he"
print(re.findall(r, "who is a girl he who is boy he who  he"))
# ["who is a girl he", "who is boy he", "who  he"] 非貪婪
分組
正則中有組的概念
分組:group
正則有判斷是否匹配的功能,還提供了提取子串的功能,用()表示提取的分組,從外向里,從左向右標注第幾組
tmp = "d{3}-d{8}"
str1 = "010-12345678"
result = re.findall(tmp, str1)
print(result)
# ["010-12345678"]

tmp2 ="(d{3})-(d{8})" # 用小括號括起來的內容為一組
result2 = re.findall(tmp2, str1)
print(result2)
# [("010", "12345678")]

tmp3 = "(d{3})-(d{8})"
result3 = re.match(tmp3, str1)
print(result3)
# <_sre.SRE_Match object; span=(0, 12), match="010-12345678">

# groups()可以查看匹配到的所有分組的情況
print(result3.groups())  # ("010", "12345678")

# group() 可以多帶帶獲取分組情況
# group(0) 一直代表匹配到的原始字符串
print(result3.group())   # 010-12345678
print(result3.group(0))  # 010-12345678
print(result3.group(1))  # 010
print(result3.group(2))  # 12345678

# 另起名稱(?P<名稱>)
tmp4 = "(?Pd{3})-(?Pd{8})"
result4 = re.match(tmp4, str1)
print(result4.group(0))
print(result4.group(1))
print(result4.group(2))
print(result4.group("love"))

正則與字符串
str1 = "ac b  c   d     e"
print(str1.split())
# ["ac", "b", "c", "d", "e"]

print(re.split(" +", str1))
# ["ac", "b", "c", "d", "e"]

# 替換字符串
# re.sub(pattern, rep1, string)
# pattern: 即將被替換的字符
# rep1:替換的字符
# count 替換次數
# subn 將結果和替換的次數放到一個元組了
res2 = re.sub(" +", "*", str1)
print(res2)  
# ac*b*c*d*e

res2 = re.sub(" +", "*", str1, count=2)
print(res2)
# ac*b*c   d     e

res2 = re.subn(" +", "*", str1)
print(res2)
# ("ac*b*c*d*e", 4)
compile
tmp = "d{3}-d{8}"
str1 = "090-99999999"
res = re.match(tmp, str1)
print(res)

tmp2 = "d{3}-d{8}"
str2 = "090-99999999"
re_tmp2 = re.compile(tmp2)
res2 = re_tmp2.match(str2)
print(res2)
# <_sre.SRE_Match object; span=(0, 12), match="090-99999999">

例子
# 判斷某一個字符串是不是11位,第一個是否是數字1

r= "^1d{10}$"
# 1開頭
# 10個數字結尾

print(re.findall(r, "12534568545"))


# 前面是3個數字 后面八個數字 中間為-

r= "^d{3}-d{8}$"


# 123456@qq.com
# ^.$ 在正則中有實際意義,如果想要作為普通字符使用需要使用轉義字符

r= "^d{6}@qq.com"    
print(re.findall(r,"125565@qq.com"))

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41644.html

相關文章

  • 正則達式

    摘要:本文內容共正則表達式火拼系列正則表達式回溯法原理學習正則表達式,是需要懂點兒匹配原理的。正則表達式迷你書問世了讓幫你生成和解析參數字符串最全正則表達式總結驗證號手機號中文郵編身份證地址等是正則表達式的縮寫,作用是對字符串執行模式匹配。 JS 的正則表達式 正則表達式 一種幾乎可以在所有的程序設計語言里和所有的計算機平臺上使用的文字處理工具。它可以用來查找特定的信息(搜索),也可以用來查...

    bang590 評論0 收藏0
  • JS中的正則達式

    摘要:構造函數可以有兩個字符串參數,第一個參數包含正則表達式的主體部分。只讀的布爾值,說明這個正則表達式是否帶有修飾符。中正則的擴展構造函數在中,只能接受字符串作為參數,允許其直接接受正則表達式作為參數。 上文傳送門:初探正則表達式 正則表達式是一個描述字符模式的對象,JavaScript 的 RegExp 類表示正則表達式,String 和 RegExp 都定義了方法,后者使用正則表達式進...

    Soarkey 評論0 收藏0
  • JavaScript正則達式總結

    摘要:正則表達式一直是里比較難以掌握的點。在中創建正則的兩種方式使用字面量這就是正則表達式的字面量語法,表示正則表達式的模式,為正則表達式的標志。字面量形式的正則表達式一般使用較多,也推薦大家盡可能使用這種形式,簡潔易讀,符合正常的使用習慣。 正則表達式一直是js里比較難以掌握的點。 看不懂,學不會,記不住。 每次需要用到正則的時候,都需要再去查找資料。 今天花時間把正則的知識點總結下,希望...

    big_cat 評論0 收藏0
  • 正則與JS中的正則

    摘要:注意本文將正則與中的正則分開討論。正則零寬斷言更多參考各種語言對于正則不同支持參考單行模式與多行模式通過設置正則表達式后的修飾符可開啟對應的匹配模式單行模式和多行模式。 最近這段時間幫同學處理一些文檔, 涉及到一些結構化文檔的工作大部分都得使用正則表達式, 之前對于正則的認識大多來源于語言書上那幾頁的介紹, 自己也沒有用過幾次。這里將我之前感到模糊的概念作個整理。因為對JS了解多點,所...

    firim 評論0 收藏0
  • JavaScript正則達式的匹配模式

    摘要:選擇分組和引用正則表達式的語法還包括指定選擇項子表達式分組和引用前一子表達式的特殊字符。帶圓括號的表達式的另一個用途是允許在同一正則表達式的后部引用前面的子表達式。 正則表達式(regular expression)是一個描述字符模式的對象。JavaScript的 RegExp類 表示正則表達式,String和RegExp都定義了方法,后者使用正則表達式進 行強大的模式匹配和文本檢索與...

    wqj97 評論0 收藏0
  • 正則達式

    摘要:最全正則表達式總結驗證號手機號中文郵編身份證地址等是正則表達式的縮寫,作用是對字符串執行模式匹配。學習目標了解正則表達式語法在中使用正則表達式在中使 JS高級技巧 本篇是看的《JS高級程序設計》第23章《高級技巧》做的讀書分享。本篇按照書里的思路根據自己的理解和經驗,進行擴展延伸,同時指出書里的一些問題。將會討論安全的類型檢測、惰性載入函數、凍結對象、定時器等話題。1. 安全的類型檢測...

    yibinnn 評論0 收藏0

發表評論

0條評論

whlong

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<