国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

python 之正則表達(dá)式詳解

這篇具有很好參考價(jià)值的文章主要介紹了python 之正則表達(dá)式詳解。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

python 之正則表達(dá)式詳解,python,python,正則表達(dá)式
分清字符串與字符

r與R

在Python中,前綴 rR 表示原始字符串。這種原始字符串中的反斜杠字符 \ 被視為普通字符,而不是轉(zhuǎn)義字符。這在處理正則表達(dá)式、文件路徑等需要保留反斜杠原始含義的情況下非常有用。

原始字符串的特點(diǎn):

  1. 反斜杠不進(jìn)行轉(zhuǎn)義: 在普通字符串中,反斜杠具有特殊含義,如 \n 表示換行符、\t 表示制表符等。但在原始字符串中,反斜杠只是普通字符,如 \\ 會(huì)被視為兩個(gè)反斜杠字符而不是轉(zhuǎn)義字符。

  2. 常用于正則表達(dá)式、文件路徑: 在處理正則表達(dá)式時(shí),原始字符串非常有用,因?yàn)檎齽t表達(dá)式經(jīng)常包含大量反斜杠。同時(shí),處理文件路徑時(shí),原始字符串能夠避免不必要的轉(zhuǎn)義。

示例:

正則表達(dá)式示例:
import re

# 使用原始字符串處理正則表達(dá)式
pattern = r'\b\d{3}\b'  # 匹配一個(gè)三位數(shù)的單詞
text = "The code is 123 and 4567."

matches = re.findall(pattern, text)
print(matches)
文件路徑示例:
path = r'C:\Users\Username\Documents\file.txt'
with open(path, 'r') as file:
    content = file.read()
    print(content)

這些示例演示了如何使用 rR 前綴創(chuàng)建原始字符串,以便在正則表達(dá)式或文件路徑等場(chǎng)景中保留反斜杠的原始含義。

有沒有r 帶來(lái)的影響

在Python中,使用 r 前綴與不使用 r 前綴的主要區(qū)別是,r 前綴創(chuàng)建的是一個(gè)"原始字符串",其中反斜杠 \ 不會(huì)被解釋為轉(zhuǎn)義字符。這在處理正則表達(dá)式時(shí)特別有用,因?yàn)檎齽t表達(dá)式本身經(jīng)常包含大量反斜杠。

使用 r 前綴的示例:

pattern = r'(\d{4}-\d{2}-\d{2})\s\1'

這個(gè)模式是用來(lái)匹配一個(gè)日期格式(YYYY-MM-DD),然后后面跟著相同的日期格式,兩者之間有一個(gè)空格。在原始字符串中,反斜杠 \ 不會(huì)被看作是轉(zhuǎn)義字符,而是作為普通字符。所以 \d 表示匹配數(shù)字字符,\s 表示匹配空白字符(空格、制表符等),\1 表示引用前面捕獲的日期格式。

不使用 r 前綴的示例:

pattern = '(\d{4}-\d{2}-\d{2})\s\1'

在這種情況下,沒有使用 r 前綴,因此反斜杠 \ 會(huì)被看作是轉(zhuǎn)義字符。這可能導(dǎo)致一些意想不到的結(jié)果,因?yàn)榉葱备芎竺娴淖址赡鼙唤忉尀樘厥庾址亲置嬉饬x。 在正則表達(dá)式中,\d 代表數(shù)字字符,\s 代表空白字符,\1 引用前面捕獲的內(nèi)容。

總的來(lái)說(shuō),使用 r 前綴創(chuàng)建原始字符串通常更適合于編寫正則表達(dá)式,因?yàn)樗梢宰尫葱备茉谧址斜3衷瓨?,避免不必要的轉(zhuǎn)義。

\b 作為單詞的界限

當(dāng)使用 \b 作為單詞邊界的元字符時(shí),可以結(jié)合不同的模式以展示其作用。以下是不同用法的示例代碼:

匹配以 “cat” 開頭的單詞:

import re

text = "The cat and the catfish sat on the catwalk."

pattern_starting_with_cat = r'\bcat\w*'
matches_starting_with_cat = re.findall(pattern_starting_with_cat, text)
print("匹配以 'cat' 開頭的單詞:", matches_starting_with_cat)

這段代碼中的 r'\bcat\w*' 匹配以 “cat” 開頭的單詞。在給定文本中,它會(huì)返回以 “cat” 開頭的所有單詞,例如 “cat”, “catfish”, “catwalk”。

匹配以 “cat” 結(jié)尾的單詞:

pattern_ending_with_cat = r'\b\w*cat\b'
matches_ending_with_cat = re.findall(pattern_ending_with_cat, text)
print("匹配以 'cat' 結(jié)尾的單詞:", matches_ending_with_cat)

這段代碼中的 r'\b\w*cat\b' 匹配以 “cat” 結(jié)尾的單詞。在給定文本中,它會(huì)返回以 “cat” 結(jié)尾的所有單詞,例如 “cat”, “catfish”。

匹配整個(gè)單詞 “cat”:

pattern_entire_word = r'\bcat\b'
matches_entire_word = re.findall(pattern_entire_word, text)
print("匹配整個(gè)單詞 'cat':", matches_entire_word)

這段代碼中的 r'\bcat\b' 匹配整個(gè)單詞 “cat”。在給定文本中,它會(huì)返回所有獨(dú)立的 “cat” 單詞。

但是它不會(huì)返回“catfood"等包含"cat"的單詞

運(yùn)行這些代碼將展示 \b 作為單詞邊界的不同用法,以便更好地理解其功能。

’ .’ 匹配除’\n’外任意字符

在正則表達(dá)式中,. 是一個(gè)特殊的元字符,用于匹配除了換行符 \n 之外的任何單個(gè)字符。

用法示例:

  1. 匹配任何單個(gè)字符: 正則表達(dá)式 . 可以匹配任何單個(gè)字符,比如字母、數(shù)字、標(biāo)點(diǎn)符號(hào)等,除了換行符。

  2. 結(jié)合其他模式使用: 可以將. 與其他模式結(jié)合使用,比如 a. 可以匹配以字母 “a” 開頭,后面跟著任何一個(gè)字符的字符串。

  3. 貪婪匹配: . 是貪婪的,它會(huì)盡可能多地匹配字符,直到無(wú)法匹配為止。

示例:

import re

text = "The cat sat on the mat."

pattern = r'c.t'  # 匹配以 "c" 開頭,后面是任意字符,然后是 "t"
matches = re.findall(pattern, text)
print(matches)  # 輸出匹配的內(nèi)容

在上述示例中,r'c.t' 這個(gè)模式將匹配字符串中以 “c” 開頭,后面跟著任意字符,然后以 “t” 結(jié)尾的部分。在給定的文本中,匹配到的是 “cat”。

. 是一個(gè)非常常用的元字符,用于捕獲或匹配大多數(shù)的單個(gè)字符,但需要注意它不能匹配換行符 \n

*匹配位于 * 之前的字符或者子模式0次或者多次

在正則表達(dá)式中,* 是一個(gè)量詞,用于指示其前面的模式可以出現(xiàn)零次或多次。它表示匹配前面的元素零次或多次。

用法示例:

  • 匹配零次或多次:

    • a* 匹配零個(gè)或多個(gè) “a”。
    • ab* 匹配 “a” 后面跟著零個(gè)或多個(gè) “b”。例如,“a”, “ab”, “abb”, “abbb”, 等等。
  • 貪婪匹配:

    • a*貪婪的,它會(huì)盡可能多地匹配 “a”,直到無(wú)法匹配為止。
  • 結(jié)合其他模式使用:

    • 可以將 * 與其他字符結(jié)合使用,比如 .* 可以匹配任意數(shù)量的任意字符(除了換行符)。

示例:

import re

text = "The cat sat on the mat."

pattern = r's.*t'  # 匹配以 "s" 開頭,后面是零個(gè)或多個(gè)任意字符,然后以 "t" 結(jié)尾
matches = re.findall(pattern, text)
print(matches)  # 輸出匹配的內(nèi)容

在上述示例中,r's.*t' 這個(gè)模式將匹配字符串中以 “s” 開頭,后面跟著零個(gè)或多個(gè)任意字符,最后以 “t” 結(jié)尾的部分。在給定的文本中,匹配到的是 “sat” 和 “sat on the mat”。

* 是一個(gè)靈活且常用的量詞,用于指示匹配其前面的模式零次或多次,以滿足靈活的匹配需求。

+ 匹配+ 之前的字符或者子模式 1次或者多次出現(xiàn)

在正則表達(dá)式中,+ 是一個(gè)量詞,用于指示其前面的模式必須至少出現(xiàn)一次或多次。它表示匹配前面的元素至少一次或多次。

用法示例:

  • 匹配一次或多次:

    • a+ 匹配一個(gè)或多個(gè) “a”。
    • ab+ 匹配 “a” 后面跟著一個(gè)或多個(gè) “b”。例如,“ab”, “abb”, “abbb”, 等等。
  • 貪婪匹配:

    • a+ 是貪婪的,它會(huì)盡可能多地匹配 “a”,直到無(wú)法匹配為止。
  • 結(jié)合其他模式使用:

    • 可以將 + 與其他字符結(jié)合使用,比如 .+ 可以匹配任意數(shù)量的任意字符(除了換行符)。

示例:

import re

text = "The cat sat on the mat."

pattern = r's.+t'  # 匹配以 "s" 開頭,后面是一個(gè)或多個(gè)任意字符,然后以 "t" 結(jié)尾
matches = re.findall(pattern, text)
print(matches)  # 輸出匹配的內(nèi)容

在上述示例中,r's.+t' 這個(gè)模式將匹配字符串中以 “s” 開頭,后面跟著一個(gè)或多個(gè)任意字符,最后以 “t” 結(jié)尾的部分。在給定的文本中,匹配到的是 “sat on the mat”。

+ 用于指示至少要有一個(gè)或多個(gè)其前面的元素出現(xiàn),使得匹配更具體并要求至少有一次出現(xiàn)。
注意:+ 號(hào)會(huì)至少匹配一次,但是* 可以至少匹配0次

- 號(hào)運(yùn)算符

在[ ]里面表示范圍

[a-z]//表示小寫字母

單單表示連接

當(dāng) - 不用作特殊含義時(shí),它只匹配連字符本身而不具備其他特殊作用。

舉例:

假設(shè)我們有一個(gè)文本字符串 “I have a 5-year-old cat”,如果我們使用模式 r'\d+-year-old',這個(gè)模式會(huì)匹配包含連字符的短語(yǔ),比如 “5-year-old”。

在這個(gè)例子中,- 只是表示連字符,它并沒有特殊的匹配行為。

| 或關(guān)系

在正則表達(dá)式中,| 稱為“管道符”或“豎線”,它用于表示“或”關(guān)系。在正則表達(dá)式中,| 用于匹配多個(gè)模式中的任何一個(gè)。

用法示例:

  • 匹配多個(gè)模式之一:

    • cat|dog 匹配包含 “cat” 或 “dog” 中任何一個(gè)的字符串。
    • yes|no 匹配包含 “yes” 或 “no” 中任何一個(gè)的字符串。
  • 用括號(hào)分組:

    • (cat|dog)food 匹配 “catfood” 或 “dogfood”。
    • yes(no|yes) 匹配 “yesno” 或 “yesyes”。

示例:

import re

text = "I have a cat and a dog."

pattern = r'cat|dog'  # 匹配包含 "cat" 或 "dog" 中任何一個(gè)的字符串
matches = re.findall(pattern, text)
print(matches)  # 輸出匹配的內(nèi)容

在上面的示例中,r'cat|dog' 這個(gè)模式將匹配包含 “cat” 或 “dog” 中任何一個(gè)的部分。在給定的文本中,匹配到的是 “cat” 和 “dog”。

| 是一個(gè)非常有用的元字符,允許同時(shí)匹配多個(gè)模式中的任何一個(gè),從而提供更靈活的匹配。

^ 規(guī)定開頭

在正則表達(dá)式中,^ 是一個(gè)特殊的元字符,用于匹配字符串的開頭。

用法示例:

  • 匹配字符串開頭: ^pattern 匹配以指定模式 pattern 開頭的字符串。
    • 例如,^hello 匹配以 “hello” 開頭的字符串。

示例:

import re

text = "hello world"

pattern = r'^hello'  # 匹配以 "hello" 開頭的字符串
matches = re.findall(pattern, text)
print(matches)  # 輸出匹配的內(nèi)容

在上面的示例中,r'^hello' 這個(gè)模式將匹配以 “hello” 開頭的字符串。在給定的文本中,由于 “hello” 出現(xiàn)在開頭,所以正則表達(dá)式匹配到了 “hello”。

^ 在正則表達(dá)式中具有錨定作用,它表示匹配字符串的開頭位置。

$ 匹配以$ 前面的字符或者模式結(jié)束的字符串

在正則表達(dá)式中,$ 是一個(gè)特殊的元字符,用于匹配字符串的結(jié)尾。

用法示例:

  • 匹配字符串結(jié)尾: pattern$ 匹配以指定模式 pattern 結(jié)尾的字符串。
    • 例如,world$ 匹配以 “world” 結(jié)尾的字符串。

示例:

import re

text = "hello world"

pattern = r'world$'  # 匹配以 "world" 結(jié)尾的字符串
matches = re.findall(pattern, text)
print(matches)  # 輸出匹配的內(nèi)容

在上面的示例中,r'world$' 這個(gè)模式將匹配以 “world” 結(jié)尾的字符串。在給定的文本中,由于 “world” 出現(xiàn)在結(jié)尾,所以正則表達(dá)式匹配到了 “world”。

$ 在正則表達(dá)式中具有錨定作用,它表示匹配字符串的結(jié)尾位置。

? 的可選擇性與改變“貪心性”

在正則表達(dá)式中,? 是一個(gè)量詞,用于指示其前面的模式可以出現(xiàn)零次或一次,表示可選匹配。

用法示例:

  • 匹配零次或一次(也就是選擇性):

    • colou?r 匹配 “colour” 或 “color”。在這里,ou? 表示 u 可以出現(xiàn)零次或一次,使得匹配模式更加靈活。
  • 非貪婪匹配:

    • a? 是非貪婪的,它只匹配零次或一次,盡可能少地匹配。
  • 結(jié)合其他模式使用:

    • 可以將 ? 與其他字符結(jié)合使用,比如 a?b 可以匹配零個(gè)或一個(gè) “a”,后面跟著 “b”。

示例:

import re

text = "The colour is red, but color is also acceptable."

pattern = r'colou?r'  # 匹配 "colour" 或 "color"
matches = re.findall(pattern, text)
print(matches)  # 輸出匹配的內(nèi)容

在上述示例中,r'colou?r' 這個(gè)模式將匹配 “colour” 或 “color”。在給定的文本中,它匹配到了 “colour” 和 “color”,因?yàn)?ou? 允許 u 出現(xiàn)零次或一次,使得模式可以匹配兩種拼寫形式。

改變貪心性

當(dāng) ? 緊跟在其他限定符(比如 *, +, {})后面時(shí),它改變限定符的默認(rèn)貪婪性,使其變?yōu)榉秦澙坊蜃钚∑ヅ洹?/p>

默認(rèn)貪婪匹配和非貪婪匹配:

  • 默認(rèn)情況下,*, +, {} 等限定符是貪婪的:

    • 它們會(huì)盡可能多地匹配文本,直到無(wú)法匹配為止。
  • 在限定符后添加 ? 將使其變?yōu)榉秦澙菲ヅ洌?/strong>

    • 這表示它們會(huì)盡可能少地匹配文本,只匹配所需的最小字符數(shù)。

示例:

import re

text = "This is a sample sentence for demonstrating non-greedy matching."

# 貪婪匹配
pattern_greedy = r'.+e'
matches_greedy = re.findall(pattern_greedy, text)
print("貪婪匹配:", matches_greedy)

# 非貪婪匹配
pattern_non_greedy = r'.+?e'
matches_non_greedy = re.findall(pattern_non_greedy, text)
print("非貪婪匹配:", matches_non_greedy)

python 之正則表達(dá)式詳解,python,python,正則表達(dá)式

在上述示例中,r'.+e' 是一個(gè)貪婪匹配,它會(huì)匹配盡可能多的字符直到找到以 “e” 結(jié)尾的內(nèi)容。相反,r'.+?e' 是一個(gè)非貪婪匹配,它會(huì)盡可能少地匹配字符直到找到以 “e” 結(jié)尾的內(nèi)容。在給定文本中,這兩種模式的匹配結(jié)果是不同的,一個(gè)會(huì)匹配更多的內(nèi)容,另一個(gè)會(huì)匹配更少的內(nèi)容。

\ 為轉(zhuǎn)義

在正則表達(dá)式中,反斜杠 \ 是一個(gè)特殊字符,用于表示后面緊跟著的字符具有特殊含義或具有特定功能。它會(huì)改變緊跟其后的字符的解釋方式,稱為轉(zhuǎn)義字符。

下面是一些常見的用法和特殊含義:

1. 轉(zhuǎn)義特殊字符:

  • 使用 \ 可以讓特殊字符失去其特殊含義。比如,. 通常匹配任意字符,但 \. 匹配實(shí)際的句點(diǎn)。

2. 匹配特殊字符:

  • \d 匹配一個(gè)數(shù)字字符。
  • \w 匹配一個(gè)字母、數(shù)字或下劃線字符。
  • \s 匹配任何空白字符(例如空格、制表符、換行符等)。

3. 匹配特定字符:

  • \n 匹配換行符。
  • \t 匹配制表符。
  • \r 匹配回車符。
  • \\ 匹配實(shí)際的反斜杠字符。

示例:

假設(shè)有以下文本字符串:

text = "The cat and the hat sat flat on the mat."

import re

pattern = r'\st\w+'  # 匹配以空格開始,后面是字母 "t",然后跟著一個(gè)或多個(gè)字母、數(shù)字或下劃線字符的內(nèi)容
matches = re.findall(pattern, text)
print(matches)

在這個(gè)示例中,r'\st\w+' 這個(gè)模式會(huì)匹配以空格開始,后面是字母 “t”,然后跟著一個(gè)或多個(gè)字母、數(shù)字或下劃線字符的內(nèi)容。在給定的文本中,這個(gè)模式匹配到的內(nèi)容是 " the"、 " the".

\num 匹配重復(fù)出現(xiàn)字符或者模式

當(dāng)使用 \num 這種形式的反向引用時(shí),num 代表著之前已經(jīng)捕獲的分組編號(hào)。這種引用可以用來(lái)匹配之前已經(jīng)出現(xiàn)的相同模式。以下是兩個(gè)示例:

示例1:匹配重復(fù)的連續(xù)數(shù)字

假設(shè)有字符串:

text = "1234 1234 5678"

使用正則表達(dá)式來(lái)匹配重復(fù)的連續(xù)數(shù)字:

import re

pattern = r'(\d+)\s\1'  # 匹配重復(fù)的連續(xù)數(shù)字
matches = re.findall(pattern, text)
print(matches)  # 輸出匹配的內(nèi)容

示例2:匹配重復(fù)的日期格式

假設(shè)有字符串:

text = "Today is 2023-10-10, and tomorrow is 2023-10-10 as well."

使用正則表達(dá)式來(lái)匹配重復(fù)的日期格式:

import re

pattern = r'(\d{4}-\d{2}-\d{2})\s\1'  # 匹配重復(fù)的日期格式
matches = re.findall(pattern, text)
print(matches)  # 輸出匹配的內(nèi)容

這兩個(gè)示例都使用了 \num 的反向引用,用來(lái)匹配先前已經(jīng)捕獲的相同模式。

\d 匹配任何數(shù)字,相當(dāng)于[0-9]

在 Python 中,\d 是一個(gè)正則表達(dá)式模式,用于匹配任何十進(jìn)制數(shù)字(0 到 9)。正則表達(dá)式是一種強(qiáng)大的文本匹配工具,\d 是其中的一個(gè)特殊標(biāo)記,表示匹配一個(gè)數(shù)字字符。

下面是一些示例,演示了如何在 Python 中使用 \d

示例 1:使用 re 模塊進(jìn)行匹配

import re

# 定義一個(gè)字符串
text = "The price is $20.99."

# 使用正則表達(dá)式模式匹配數(shù)字
matches = re.findall(r'\d', text)

# 打印匹配結(jié)果
print(matches)  # 輸出:['2', '0', '9', '9']

示例 2:結(jié)合其他正則表達(dá)式模式

\d 可以與其他模式結(jié)合使用,例如 \d+ 匹配一個(gè)或多個(gè)連續(xù)數(shù)字。

import re

text = "There are 12 cats, 3 dogs, and 8 birds."

# 匹配一個(gè)或多個(gè)數(shù)字
matches = re.findall(r'\d+', text)

# 打印匹配結(jié)果
print(matches)  # 輸出:['12', '3', '8']

示例 3:使用正則表達(dá)式進(jìn)行替換

也可以使用 \d 來(lái)替換匹配的數(shù)字。

import re

text = "My phone number is 123-456-7890."

# 用 "X" 替換數(shù)字
new_text = re.sub(r'\d', 'X', text)

# 打印替換后的文本
print(new_text)  # 輸出:"My phone number is XXX-XXX-XXXX."

總之,\d 是一個(gè)在正則表達(dá)式中表示匹配數(shù)字的特殊符號(hào),在 Python 的 re 模塊中可以使用它進(jìn)行文本匹配、提取或替換操作。

\D匹配任何不是數(shù)字

在 Python 的正則表達(dá)式中,\D 是一個(gè)特殊的元字符,用于匹配非數(shù)字字符。與 \d 匹配數(shù)字相反,\D 匹配除了 0 到 9 的任何非數(shù)字字符。

下面是一些示例,演示了如何在 Python 中使用 \D

示例 1:使用 re 模塊進(jìn)行匹配

import re

# 定義一個(gè)字符串
text = "The price is $20.99."

# 使用正則表達(dá)式模式匹配非數(shù)字字符
matches = re.findall(r'\D', text)

# 打印匹配結(jié)果
print(matches)  # 輸出:['T', 'h', 'e', ' ', 'p', 'r', 'i', 'c', 'e', ' ', 'i', 's', ' ', '$', '.']

示例 2:結(jié)合其他正則表達(dá)式模式

\D 也可以與其他模式結(jié)合使用,例如 \D+ 匹配一個(gè)或多個(gè)連續(xù)的非數(shù)字字符。

import re

text = "There are 12 cats, 3 dogs, and 8 birds."

# 匹配一個(gè)或多個(gè)非數(shù)字字符
matches = re.findall(r'\D+', text)

# 打印匹配結(jié)果
print(matches)  # 輸出:['There are ', ' cats, ', ' dogs, and ', ' birds.']

示例 3:使用正則表達(dá)式進(jìn)行替換

同樣可以使用 \D 來(lái)替換匹配的非數(shù)字字符。

import re

text = "My phone number is 123-456-7890."

# 用 "*" 替換非數(shù)字字符
new_text = re.sub(r'\D', '*', text)

# 打印替換后的文本
print(new_text)  # 輸出:"************1234567890"

總之,\D 是一個(gè)在正則表達(dá)式中表示匹配非數(shù)字字符的特殊符號(hào),在 Python 的 re 模塊中可以使用它進(jìn)行文本匹配、提取或替換操作。

\s 匹配任何空白字符

在 Python 中,\s 是一個(gè)特殊的正則表達(dá)式元字符,用于匹配空白字符??瞻鬃址梢允强崭瘛⒅票矸═ab)、換行符、回車符等在文本中不可見的空白符號(hào)。

下面是一些示例,演示了如何在 Python 中使用 \s

示例 1:使用 re 模塊進(jìn)行匹配

import re

# 定義一個(gè)字符串包含空白字符
text = "Hello\tWorld\nPython Regex"

# 使用正則表達(dá)式模式匹配空白字符
matches = re.findall(r'\s', text)

# 打印匹配結(jié)果
print(matches)  # 輸出:['\t', '\n', ' ']

示例 2:結(jié)合其他正則表達(dá)式模式

\s 也可以與其他模式結(jié)合使用,例如 \s+ 匹配一個(gè)或多個(gè)連續(xù)的空白字符。

import re

text = "This  is    a  test"

# 匹配一個(gè)或多個(gè)空白字符
matches = re.findall(r'\s+', text)

# 打印匹配結(jié)果
print(matches)  # 輸出:['  ', ' ', '    ', '  ']

示例 3:使用正則表達(dá)式進(jìn)行替換

同樣可以使用 \s 來(lái)替換匹配的空白字符。

import re

text = "Python\tis\tawesome."

# 用空格替換空白字符
new_text = re.sub(r'\s', ' ', text)

# 打印替換后的文本
print(new_text)  # 輸出:"Python is awesome."

總之,\s 是一個(gè)在正則表達(dá)式中表示匹配空白字符的特殊符號(hào),在 Python 的 re 模塊中可以使用它進(jìn)行文本匹配、提取或替換操作。

\S,與\s 含義相反

\w匹配數(shù)字,字母,下劃線

在 Python 中,\w 是一個(gè)特殊的正則表達(dá)式元字符,用于匹配字母、數(shù)字或下劃線字符(即單詞字符)。\w 匹配單詞字符,包括 A-Z、a-z、0-9 和下劃線(_)。

下面是一些示例,演示了如何在 Python 中使用 \w

示例 1:使用 re 模塊進(jìn)行匹配

import re

# 定義一個(gè)包含單詞字符的字符串
text = "Hello, this is a sample string with 123 and _underscore."

# 使用正則表達(dá)式模式匹配單詞字符
matches = re.findall(r'\w', text)

# 打印匹配結(jié)果
print(matches)  # 輸出:['H', 'e', 'l', 'l', 'o', 't', 'h', 'i', 's', 'i', 's', 'a', 's', 'a', 'm', 'p', 'l', 'e', 's', 't', 'r', 'i', 'n', 'g', 'w', 'i', 't', 'h', '1', '2', '3', 'a', 'n', 'd', '_', 'u', 'n', 'd', 'e', 'r', 's', 'c', 'o', 'r', 'e']

示例 2:結(jié)合其他正則表達(dá)式模式

\w 也可以與其他模式結(jié)合使用,例如 \w+ 匹配一個(gè)或多個(gè)連續(xù)的單詞字符。

import re

text = "Words, numbers like 123, and_special_characters!"

# 匹配一個(gè)或多個(gè)單詞字符
matches = re.findall(r'\w+', text)

# 打印匹配結(jié)果
print(matches)  # 輸出:['Words', 'numbers', 'like', '123', 'and_special_characters']

示例 3:使用正則表達(dá)式進(jìn)行替換

可以使用 \w 來(lái)替換匹配的單詞字符。

import re

text = "Replace these words with a single character."

# 用 "X" 替換單詞字符
new_text = re.sub(r'\w', 'X', text)

# 打印替換后的文本
print(new_text)  # 輸出:"XXXXXXX XXXXX XXXX XXXX X XXXXX XXXXXXXXX."

總之,\w 是一個(gè)在正則表達(dá)式中表示匹配字母、數(shù)字或下劃線字符的特殊符號(hào),在 Python 的 re 模塊中可以使用它進(jìn)行文本匹配、提取或替換操作。

\W 與\w 含義相反

(),用于分組,提取,提取匹配

在 Python 的正則表達(dá)式中,括號(hào) () 不是具體的匹配字符,而是一個(gè)元字符,用于多種功能,包括分組、捕獲和提取匹配等。

1. 分組

括號(hào) () 用于創(chuàng)建一個(gè)子表達(dá)式,使其中的模式被視為一個(gè)整體,可以對(duì)其應(yīng)用量詞或進(jìn)行邏輯分組。這允許對(duì)一個(gè)組內(nèi)的模式進(jìn)行操作。例如:

import re

text = "apple pie, cherry pie, peach pie"

# 匹配 "apple", "cherry", "peach" 后面緊跟著 " pie" 的部分
matches = re.findall(r'(.*?) pie', text)

# 輸出匹配結(jié)果
print(matches)  # 輸出:['apple', 'cherry', 'peach']

在這個(gè)例子中,(.*?) 是一個(gè)捕獲組,匹配任何字符零次或多次(非貪婪匹配),然后緊接著單詞 “pie”。括號(hào)將 .*? 模式分組,使得后面的 " pie" 對(duì)整個(gè)組進(jìn)行匹配。

2. 捕獲

括號(hào) () 還用于捕獲匹配的內(nèi)容,這樣匹配的結(jié)果可以被提取出來(lái)。這種捕獲可以被后續(xù)引用或者在匹配后提取出來(lái)。例如:

import re

text = "Date: 2023-11-07"

# 匹配日期格式并進(jìn)行捕獲
match = re.search(r'Date: (\d{4}-\d{2}-\d{2})', text)

# 輸出捕獲的日期
if match:
    print(match.group(1))  # 輸出:'2023-11-07'

在這個(gè)例子中,(\d{4}-\d{2}-\d{2}) 是一個(gè)捕獲組,用括號(hào)捕獲了形如 “yyyy-mm-dd” 的日期格式。

3. 后向引用

捕獲組中的內(nèi)容還可以在同一個(gè)正則表達(dá)式中后向引用,用于檢索匹配到的內(nèi)容。這樣可以在正則表達(dá)式中引用之前捕獲的內(nèi)容。例如:

import re

text = "apple apple"

# 查找重復(fù)的單詞
matches = re.search(r'(\b\w+\b) \1', text)

# 輸出匹配結(jié)果
if matches:
    print(matches.group())  # 輸出:"apple apple"

在這個(gè)例子中,(\b\w+\b) 捕獲一個(gè)單詞,并且 \1 匹配之前捕獲的單詞。

總的來(lái)說(shuō),括號(hào) () 在正則表達(dá)式中用于創(chuàng)建子表達(dá)式、捕獲匹配內(nèi)容和后向引用。它們提供了強(qiáng)大的功能,可以更靈活地進(jìn)行模式匹配和提取文本信息。

{m,n}控制次數(shù)

在正則表達(dá)式中,花括號(hào) {} 用于指定模式的重復(fù)次數(shù)或者長(zhǎng)度范圍。這個(gè)元字符提供了靈活的量詞控制,允許你指定匹配的確切次數(shù)或某個(gè)范圍內(nèi)的次數(shù)。

指定重復(fù)次數(shù)

花括號(hào) {} 可以用來(lái)指定精確的重復(fù)次數(shù)。比如:

  • \d{3} 匹配恰好連續(xù)出現(xiàn) 3 次的數(shù)字。
  • \w{4} 匹配恰好包含 4 個(gè)字母、數(shù)字或下劃線的單詞字符。
import re

text = "12345, abc, 9876, xy"

# 匹配恰好連續(xù)出現(xiàn) 3 次的數(shù)字
matches = re.findall(r'\d{3}', text)

# 輸出匹配結(jié)果
print(matches)  # 輸出:['123', '987']

指定范圍

花括號(hào)也可用于指定一個(gè)范圍,表示匹配次數(shù)的最小和最大值。

  • \w{2,4} 匹配包含 2 到 4 個(gè)字母、數(shù)字或下劃線的單詞字符。
import re

text = "apple, banana, grapes, pear, orange"

# 匹配包含 2 到 4 個(gè)字母的單詞
matches = re.findall(r'\w{2,4}', text)

# 輸出匹配結(jié)果
print(matches)  # 輸出:['appl', 'bana', 'grap', 'pear', 'oran']

貪婪與非貪婪匹配

默認(rèn)情況下,花括號(hào)是貪婪的,會(huì)匹配盡可能長(zhǎng)的字符串。但可以使用 ? 將其變?yōu)榉秦澙菲ヅ洹?/p>

  • \d{2,4} 會(huì)匹配最長(zhǎng)的連續(xù)數(shù)字(2 到 4 位數(shù)字)。
  • \d{2,4}? 會(huì)匹配最短的連續(xù)數(shù)字(2 到 4 位數(shù)字)。
import re

text = "123456789"

# 貪婪匹配
matches_greedy = re.search(r'\d{2,4}', text)
if matches_greedy:
    print(matches_greedy.group())  # 輸出:'1234'

# 非貪婪匹配
matches_non_greedy = re.search(r'\d{2,4}?', text)
if matches_non_greedy:
    print(matches_non_greedy.group())  # 輸出:'12'

花括號(hào) {} 在正則表達(dá)式中提供了精確控制和靈活性,允許指定重復(fù)次數(shù)或長(zhǎng)度范圍,可以根據(jù)具體需求匹配所需的模式。

[ ] 與 [ ^ ]

在正則表達(dá)式中,方括號(hào) [] 用于創(chuàng)建一個(gè)字符集,它表示一個(gè)字符可以是集合中的任何一個(gè)字符。方括號(hào)提供了一種靈活的方式來(lái)匹配特定的字符。

單個(gè)字符匹配

使用方括號(hào) [] 可以指定要匹配的單個(gè)字符。例如:

  • [aeiou] 匹配任何一個(gè)元音字母(a、e、i、o、u)。
  • [123] 匹配任何一個(gè)數(shù)字 1、2 或 3。
import re

text = "apple, orange, banana"

# 匹配單詞中包含的元音字母
matches = re.findall(r'[aeiou]', text)

# 輸出匹配結(jié)果
print(matches)  # 輸出:['a', 'e', 'o', 'a', 'e', 'a', 'a']

字符范圍

方括號(hào) [] 還允許指定字符范圍。使用連字符 - 可以表示一個(gè)字符范圍。

  • [a-z] 匹配任何小寫字母。
  • [A-Z] 匹配任何大寫字母。
  • [0-9] 匹配任何數(shù)字字符。
import re

text = "apple123, ORANGE456, Banana789"

# 匹配字符串中的小寫字母、大寫字母和數(shù)字字符
matches_lower = re.findall(r'[a-z]', text)
matches_upper = re.findall(r'[A-Z]', text)
matches_digits = re.findall(r'[0-9]', text)

# 輸出匹配結(jié)果
print(matches_lower)  # 輸出:['a', 'p', 'p', 'l', 'e']
print(matches_upper)  # 輸出:['O', 'R', 'A', 'N', 'G', 'E', 'B']
print(matches_digits)  # 輸出:['1', '2', '3', '4', '5', '6', '7', '8', '9']

否定字符集

在方括號(hào)內(nèi)的 ^ 符號(hào)可以用來(lái)創(chuàng)建否定字符集,匹配不在集合中的字符。

  • [^0-9] 匹配任何不是數(shù)字的字符。
import re

text = "abc123def456ghi"

# 匹配非數(shù)字字符
matches = re.findall(r'[^0-9]', text)

# 輸出匹配結(jié)果
print(matches)  # 輸出:['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']

方括號(hào) [] 在正則表達(dá)式中提供了一種便捷的方式來(lái)匹配指定的字符集或范圍,使得對(duì)單個(gè)字符的匹配變得非常靈活。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-740739.html

到了這里,關(guān)于python 之正則表達(dá)式詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【從零學(xué)習(xí)python 】65. Python正則表達(dá)式修飾符及其應(yīng)用詳解

    修飾符 描述 re.I 使匹配對(duì)大小寫不敏感 re.M 多行匹配,影響 ^ 和 $ re.S 使 . 匹配包括換行在內(nèi)的所有字符 示例代碼如下: 以上是關(guān)于正則表達(dá)式修飾符的介紹和示例。修飾符可以根據(jù)需要來(lái)調(diào)整正則表達(dá)式的匹配方式,從而更加靈活地處理字符串匹配問題。使用合適的修飾

    2024年02月11日
    瀏覽(91)
  • 【100天精通python】Day23:正則表達(dá)式,基本語(yǔ)法與re模塊詳解示例

    ? 目錄 ?專欄導(dǎo)讀? 1?正則表達(dá)式概述 2 正則表達(dá)式語(yǔ)法 2.1?正則表達(dá)式語(yǔ)法元素

    2024年02月14日
    瀏覽(50)
  • 正則表達(dá)式詳解

    正則表達(dá)式(Regular Expression),通常簡(jiǎn)稱為正則或正則表達(dá)式,是一種用于描述字符串模式的工具。它是由一系列字符和特殊字符組成的字符串,用于定義搜索模式或進(jìn)行字符串匹配、替換、提取等操作。 正則表達(dá)式提供了一種靈活、強(qiáng)大且通用的方式來(lái)處理文本。它可以用

    2024年01月17日
    瀏覽(21)
  • 正則表達(dá)式學(xué)習(xí)詳解

    正則表達(dá)式(Regular Expression),通常簡(jiǎn)稱為正則或正則表達(dá)式,是一種用于描述字符串模式的工具。它是由一系列字符和特殊字符組成的字符串,用于定義搜索模式或進(jìn)行字符串匹配、替換、提取等操作。 正則表達(dá)式提供了一種靈活、強(qiáng)大且通用的方式來(lái)處理文本。它可以用

    2024年02月13日
    瀏覽(20)
  • Python正則表達(dá)式之學(xué)習(xí)正則表達(dá)式三步曲

    ????????正則表達(dá)式描述了一種字符串匹配的模式,可以用來(lái)檢查一個(gè)串的有無(wú)某子串,或者做子串匹配替換,取出子串等操作。也可以說(shuō)正則表達(dá)式就是字符串的匹配規(guī)則,也可以理解為是一種模糊匹配,匹配滿足正則條件的字符串。 ????????1、數(shù)據(jù)驗(yàn)證(eg:表單驗(yàn)

    2024年02月15日
    瀏覽(94)
  • shell 正則表達(dá)式詳解

    shell 正則表達(dá)式詳解

    目錄 正則表達(dá)式 一,什么是正則表達(dá)式 二,為什么使用正則表達(dá)式 三,如何使用正則表達(dá)式 示例: 四,基本正則表達(dá)式 基本正則表達(dá)式示例: 正則表達(dá)式字符集示例: 五,擴(kuò)展正則表達(dá)式 擴(kuò)展正則表達(dá)式示例: 擴(kuò)展: ? ? ? ?正則表達(dá)式是通過一些特殊字符的排列,

    2024年01月17日
    瀏覽(21)
  • 正則表達(dá)式 之 斷言詳解

    正則表達(dá)式 之 斷言詳解

    正則表達(dá)式的先行斷言和后行斷言一共有 4 種形式: (?=pattern)?零寬正向先行斷言(zero-width positive lookahead assertion) (?!pattern)?零寬負(fù)向先行斷言(zero-width negative lookahead assertion) (?=pattern)?零寬正向后行斷言(zero-width positive lookbehind assertion) (?!pattern)?零寬負(fù)向后行斷言(zero-width neg

    2024年02月11日
    瀏覽(20)
  • MySQL正則表達(dá)式 | 事務(wù)詳解

    MySQL正則表達(dá)式 | 事務(wù)詳解

    目錄 一、正則表達(dá)式 實(shí)例操作 二、事務(wù) 事務(wù)控制語(yǔ)句 MYSQL 事務(wù)處理主要有兩種方法 SQL測(cè)試代碼 PHP中使用事務(wù)實(shí)例 使用保留點(diǎn) SAVEPOINT MySQL可以通過? LIKE ...% ?來(lái)進(jìn)行模糊匹配。 MySQL 同樣也支持其他正則表達(dá)式的匹配, MySQL中使用 REGEXP 操作符來(lái)進(jìn)行正則表達(dá)式匹配。 如果

    2023年04月18日
    瀏覽(17)
  • 老夫的正則表達(dá)式大成了,桀桀桀桀?。?!【Python 正則表達(dá)式筆記】

    特殊字符 .^$?+*{}[]()| 為特殊字符,若想要使用字面值,必須使用 進(jìn)行轉(zhuǎn)義 字符類 [] [] 匹配包含在方括號(hào)中的任何字符。它也可以指定范圍,例: [a-zA-Z0-9] 表示a到z,A到Z,0到9之間的任何一個(gè)字符 [u4e00-u9fa5] 匹配 Unicode 中文 [^x00-xff] 匹配雙字節(jié)字符(包括中文) 在 [] 中

    2024年02月04日
    瀏覽(21)
  • 詳解正則表達(dá)式匹配方法 match()

    詳解正則表達(dá)式匹配方法 match()

    在前端開發(fā)中,正則表達(dá)式是一大利器。所以我們這次就來(lái)討論下match()方法。 match本身是JavaScript語(yǔ)言中字符串對(duì)象的一個(gè)方法,該方法的簽名是 match([string] | [RegExp]) 它的參數(shù)既可以是一個(gè)字符串,也可以是一個(gè)正則表達(dá)式。該方法絕大多數(shù)都是要使用正則表達(dá)式的,所以參

    2024年02月11日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包