柚子快報激活碼778899分享:正則表達(dá)式學(xué)習(xí)筆記
柚子快報激活碼778899分享:正則表達(dá)式學(xué)習(xí)筆記
1. 資源鏈接
https://regex101.com/(很好用的測試正則表達(dá)式的工具)www.debuggex.comAI-Powered Regex Solver10 分鐘快速掌握正則表達(dá)式_嗶哩嗶哩_bilibili(入門學(xué)習(xí)視頻)
2.主要內(nèi)容
1. 元字符(Metacharacters)
元字符是正則表達(dá)式中具有特殊含義的字符,匹配特定的字符類型或位置。以下是一些常用的元字符:
.: 匹配任意單個字符(換行符除外)。^: 匹配字符串的開始。$: 匹配字符串的結(jié)束。*: 匹配前面的字符 0 次或多次。+: 匹配前面的字符 1 次或多次。?: 匹配前面的字符 0 次或 1 次。{n}: 精確匹配前面的字符 n 次。{n,}: 匹配前面的字符至少 n 次。{n,m}: 匹配前面的字符至少 n 次,至多 m 次。[]: 匹配方括號內(nèi)的任意一個字符,例如 [abc] 匹配 a、b 或 c。|: 或運(yùn)算符,匹配符號兩邊的任意一個模式,例如 a|b 匹配 a 或 b。(): 捕獲組,用于提取匹配的子串或在模式中應(yīng)用量詞。\: 轉(zhuǎn)義字符,用于匹配元字符本身或特殊的轉(zhuǎn)義序列。
1.1 限定符 (Quantifier)
限定符用于指定前面的字符或表達(dá)式在目標(biāo)字符串中出現(xiàn)的次數(shù)。
*: 匹配前面的字符 0 次或多次。+: 匹配前面的字符 1 次或多次。?: 匹配前面的字符 0 次或 1 次。{n}: 精確匹配 n 次。{n,}: 至少匹配 n 次。{n,m}: 匹配 n 到 m 次。
例如:
a*: 匹配 a 出現(xiàn) 0 次或多次。例如,"aaa" 或 "" 都可以匹配。a+: 匹配 a 出現(xiàn) 1 次或多次。例如,"a" 或 "aaa" 可以匹配,但 "" 無法匹配。a?: 匹配 a 出現(xiàn) 0 次或 1 次。例如,"a" 或 "" 可以匹配,但 "aa" 無法匹配。a{6}: 匹配 a 精確出現(xiàn) 6 次。例如,"aaaaaa" 可以匹配。a{2,6}: 匹配 a 出現(xiàn) 2 到 6 次之間。例如,"aa"、"aaa"、"aaaaaa" 可以匹配。a{2,}: 匹配 a 出現(xiàn)至少 2 次。例如,"aa" 或 "aaaaaa" 可以匹配。
1.2 或運(yùn)算符 (OR Operator)
或運(yùn)算符用于在正則表達(dá)式中創(chuàng)建多個可選項(xiàng)。
(a|b): 匹配 a 或 b 中的任意一個。例如,"a" 或 "b" 可以匹配。(ab)|(cd): 匹配 ab 或 cd 之一。例如,"ab" 或 "cd" 可以匹配。
1.3 字符類 (Character Classes)
字符類用于匹配一組字符中的任意一個。
[abc]: 匹配 a、b 或 c 中的任意一個字符。[a-c]: 匹配 a 到 c 之間的任意一個字符,這種形式用于表示字符的范圍。[a-fA-F0-9]: 匹配小寫字母 a 到 f、大寫字母 A 到 F 以及數(shù)字 0 到 9。這通常用于匹配十六進(jìn)制數(shù)字。[^0-9]: 匹配非數(shù)字字符。^ 在字符類中表示取反。
1.4 貪婪/懶惰匹配 (Greedy / Lazy Match)
貪婪匹配和懶惰匹配用于控制量詞的行為:
默認(rèn)情況下,量詞是貪婪的,這意味著它會盡可能多地匹配字符。例如,<.+> 會匹配盡可能多的字符。使用 ? 使量詞變?yōu)閼卸杵ヅ?,這樣它會盡可能少地匹配字符。例如,<.+?> 會匹配盡可能少的字符。
2. 常見轉(zhuǎn)義序列
\d: 匹配任何一個數(shù)字,相當(dāng)于 [0-9]。\D: 匹配任何一個非數(shù)字字符。\w: 匹配任何一個字母、數(shù)字或下劃線,相當(dāng)于 [a-zA-Z0-9_]。\W: 匹配任何一個非字母、數(shù)字或下劃線的字符。\s: 匹配任何一個空白字符(空格、制表符、換行符等)。\S: 匹配任何一個非空白字符。
3. 邊界匹配
^: 匹配字符串的開始。例如 ^Hello 匹配以 Hello 開頭的字符串。$: 匹配字符串的結(jié)束。例如 world$ 匹配以 world 結(jié)尾的字符串。\b: 匹配單詞邊界。例如 \bword\b 匹配完整的單詞 word。
圖片中顯示的內(nèi)容包括了一些正則表達(dá)式的核心概念和操作符,以下是這些概念的詳細(xì)講解:
4. 捕獲組和非捕獲組
捕獲組用于提取匹配到的子字符串:
(abc): 匹配 abc 并捕獲該匹配結(jié)果。(?:abc): 匹配 abc 但不捕獲該匹配結(jié)果(非捕獲組)。
捕獲組在正則表達(dá)式中非常有用,特別是在匹配并提取子字符串時。
5. 零寬斷言(Lookahead and Lookbehind)
零寬斷言用于匹配位置,而不是匹配字符,它們不會消耗字符。
(?=pattern): 正向先行斷言,匹配某個模式前的位置。(?!pattern): 負(fù)向先行斷言,匹配某個模式前不存在的位置。(?<=pattern): 正向后行斷言,匹配某個模式后的位置。(?
圖片中顯示的內(nèi)容包括了一些正則表達(dá)式的核心概念和操作符,以下是這些概念的詳細(xì)講解:
3. 應(yīng)用場景
匹配字符串: 通過正則表達(dá)式查找、驗(yàn)證特定的字符串模式。提取信息: 使用捕獲組從字符串中提取特定的信息。文本替換: 使用正則表達(dá)式替換文本中的某些部分。數(shù)據(jù)驗(yàn)證: 驗(yàn)證用戶輸入的數(shù)據(jù)格式是否正確,例如驗(yàn)證電子郵件、電話號碼等。
4. 示例和實(shí)踐
示例 1:匹配電子郵件地址
import re
email = "contact@example.com"
pattern = r'[\w\.-]+@[\w\.-]+'
match = re.match(pattern, email)
if match:
print("Valid email address:", match.group())
else:
print("Invalid email address")
示例 2:提取文本中的日期
import re
text = "Today's date is 2024-08-23."
pattern = r'\d{4}-\d{2}-\d{2}'
date = re.search(pattern, text)
if date:
print("Found date:", date.group())
else:
print("No date found")
示例 3:替換文本中的敏感信息
import re
text = "My credit card number is 1234-5678-9876-5432."
pattern = r'\d{4}-\d{4}-\d{4}-\d{4}'
safe_text = re.sub(pattern, "****-****-****-****", text)
print("Safe text:", safe_text)
示例 4:匹配 IPv6 地址
import re
# 示例中的IPv6地址
ipv6_address = "2001:0db8:85a3:0000:0000:8a2e:0370:7334"
# 匹配IPv6地址的正則表達(dá)式模式
pattern = r'([0-9a-fA-F]{1,4}:){7}([0-9a-fA-F]{1,4})'
match = re.match(pattern, ipv6_address)
if match:
print("Valid IPv6 address:", match.group())
else:
print("Invalid IPv6 address")
[0-9a-fA-F]{1,4}: 匹配 1 到 4 個十六進(jìn)制數(shù)字(0-9,a-f,A-F)。:: 匹配冒號分隔符。([0-9a-fA-F]{1,4}:){7}: 匹配 7 組由冒號分隔的 1 到 4 個十六進(jìn)制數(shù)字。([0-9a-fA-F]{1,4}): 匹配最后一組 1 到 4 個十六進(jìn)制數(shù)字。
擴(kuò)展:
IPv6 地址的表示形式可能會有所不同,比如可以使用縮略表示法(雙冒號::),這種情況下,正則表達(dá)式會更復(fù)雜。如果要匹配完整的 IPv6 地址(包括可能的縮略表示),可以參考更復(fù)雜的模式,如:
pattern = r'(([0-9a-fA-F]{1,4}:){7}([0-9a-fA-F]{1,4})|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}){1,7})'
這個正則表達(dá)式考慮了 IPv6 地址中的縮寫形式,但實(shí)現(xiàn)起來比較復(fù)雜,通常可以借助專門的庫來解析和驗(yàn)證 IPv6 地址。
柚子快報激活碼778899分享:正則表達(dá)式學(xué)習(xí)筆記
推薦文章
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。