正規表示式

2021-09-11 20:09:04 字數 4339 閱讀 8298

萬用字元:

*: 代表任何字串

?: 代表單個字元

.: 當前目錄

…:當前目錄的上一級目錄

[0-9]: 單個字元為0~9

[a-z]: 代表小寫的a-z

[a-z]: 代表大寫的a-z

[a-za-z]:同時代表大小寫的

[0-9a-za-z]:代表大小寫之外同時還包括0-9

[[:digit:]]:匹配任意數字

[[:upper:]]:匹配大寫字母

[[:lower:]]:匹配小寫字母

[[:space:]]:匹配任意個空格

#示例:

import glob

glob.glob(』./[0-9].*』)

[』./1.gif』, 『./2.txt』]

glob.glob(』*.gif』)

[『1.gif』, 『card.gif』]

glob.glob(』?.gif』)

[『1.gif』]

glob.glob(』**/*.txt』, recursive=true)

[『2.txt』, 『sub/3.txt』]

glob.glob(』./**/』, recursive=true)

[』./』, 『./sub/』]

import glob

glob.glob(』*.gif』)

[『card.gif』]

glob.glob(』.c*』)

[』.card.gif』]

「」"import os

import glob

files1 = [file for file in os.listdir(』.』) if file.endswith(』.conf』)]

files2= glob.glob(』./*.conf』)

print(files1)

print(files2)

import re

# *************************match方法*************************8

# match嘗試從字串的起始位置開始匹配;

# - 如果起始位置沒有匹配成功, 返回none;

# - 如果起始位置匹配成功, 返回乙個物件, 通過group方法獲取匹配的內容;

# a match object, or none if no match was found.

aobj = re.match(r'we', 'wetoshello')

print(aobj)

print(aobj.group())

# \d 單個數字

# \d \d的取反 , 除了數字之外

bobj = re.match(r'\d', '1westos')

if bobj:

print(bobj.group())

bobj = re.match(r'\d', '_westos')

if bobj:

print(bobj.group())

# *****************************findall********************

# findall會掃瞄整個字串, 獲取匹配的所有內容;

res = re.findall(r'\d\d', '閱讀數為2 點讚數為10')

print(res)

# *************************search*******************8

# search會掃瞄整個字串, 只返回第乙個匹配成功的內容的sre物件;

# - 如果起始位置沒有匹配成功, 返回none;

# - 如果起始位置匹配成功, 返回乙個物件, 通過group方法獲取匹配的內容;

resobj = re.search(r'\d', '閱讀數為8 點讚數為10')

if resobj:

print(resobj.group())

.: 匹配除了\n之外的任意字元; [.\n]

\d: digit--(數字), 匹配乙個數字字元, 等價於[0-9]

\d: 匹配乙個非數字字元, 等價於[^0-9]

\s: space(廣義的空格: 空格, \t, \n, \r), 匹配單個任何的空白字元;

\s: 匹配除了單個任何的空白字元;

\w: 字母數字或者下劃線, [a-za-z0-9_]

\w: 除了字母數字或者下劃線, [^a-za-z0-9_]

import re

# 匹配數字

# pattern = r'\d'

pattern = r'[0-9]'

string = "hello_1$%"

print(re.findall(pattern, string))

# 匹配字母數字或者下劃線;

# pattern = r'\w'

pattern = r'[a-za-z0-9_]'

string = "hello_1$%"

print(re.findall(pattern, string))

# 匹配除了字母數字或者下劃線;

# pattern = r'\w'

pattern = r'[^a-za-z0-9_]'

string = "hello_1$%"

print(re.findall(pattern, string))

# .: 匹配除了\n之外的任意字元; [.\n]

print(re.findall(r'.', 'hello westos\n\t%$'))

1. 設計乙個正則來找出乙個字串序列中的10-59;
pattern = r'[1-5][0-9]'
2. 設計乙個正則來過濾乙個字串序列中只包含兩個字元, 其中第乙個字母是大寫的a或者b或者c;
pattern = r'[abc].'
表示分組

| : 匹配| 左右任意乙個表示式即可;

(ab): 將括號中的字元作為乙個分組

\num: 引用分組第num個匹配到的字串

(?p): 分組起別名

(?p=name) : 引用分組的別名

import re

print(re.findall(r'westos|hello', "hellowestos"))

# 進行分組的時候, findall方法只返回分組裡面的內容;

# group方法會返回匹配的所有內容;

print(sreobj.group())

# groups方法返回分組裡面的內容;

print(sreobj.groups())

# 需求: 獲取標籤裡面的文字, 並判斷標籤是否成對出現?

htmlstr = "welcome to westos!

"pattern = r'<(\w+)><(\w+)>(.+)'

print(re.findall(pattern, htmlstr))

print(re.findall(pattern, htmlstr)[0][2])

# 需求: 分組起別名?

htmlstr = "welcome to westos!

"pattern = r'<(?p\w+)><(?p\w+)>(?p.+)' \

r''print(re.findall(pattern, htmlstr))

sreobj = re.search(pattern, htmlstr)

if sreobj:

print(sreobj.group())

print(sreobj.groups())

print(sreobj.groupdict())

print(sreobj.groupdict()['text'])

正規表示式 正規表示式 總結

非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...

正規表示式 表示式

網域名稱 a za z0 9 a za z0 9 a za z0 9 a za z0 9 interneturl a za z s 或 http w w w 手機號碼 13 0 9 14 5 7 15 0 1 2 3 5 6 7 8 9 18 0 1 2 3 5 6 7 8 9 d 號碼 x x x...

Linux正規表示式 編寫正規表示式

為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...