91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

關于正則表達式(regex)的插圖指南

m3Fp_almosthuma ? 來源:機器之心 ? 2020-01-27 11:02 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

這篇博客是關于正則表達式(regex)的插圖指南,旨在為那些從來沒有使用過正則表達式,想嘗試但又望而生畏的新手提供一個簡單介紹。

所以,歡迎使用正則表達式…

對于大多數(shù)沒有接受過正式 CS 教育的人來說,正則表達式似乎只有最核心的 Unix 程序員才敢碰。

一個好的正則表達式看起來像魔法,但請記住:任何足夠先進的技術都無法與魔法區(qū)分開來。

所以,就讓我們揭開正則表達式的神秘面紗!

如果你理解正則表達式,它會突然變成一個超快速和強大的工具……但你首先需要理解它,老實說,我覺得新手可能會對它望而生畏!

讓我們從基礎開始。正則表達式(regex)是什么?它們的用途是什么?

Regex 新手上路

本質上來看,正則表達式是定義一種搜索模式的字符序列。

正則表達式通常用于 grep 等工具中,以在較長文本字符串中查找模式。

考慮以下一個 cat.txt 文件:

catcat2dog

如果我們使用正則表達式 cat 來搜索匹配項,我們會找到以下匹配項:

catcat2

高級用戶需要注意的是,本文存在一個技術上的錯誤,即正則表達式和使用正則表達式的工具(如 grep)混為了一談。

正則表達式適用于字符,而不是單詞

需要反復強調的一個重要問題是:正則表達式適用于字符,而不是單詞。隱含串聯(lián)。

如果我們使用正則表達式搜索模式 cat,則不會查找單詞「cat」,而會查找字符 c、a 和 t。

點和星號

最基本的字符是單個字符,如 a、b、c 等?,F(xiàn)在讓我們介紹以下兩種特殊的字符。

.(點)字符可以匹配*任何單個字符*。例如,如果我們搜索 c.t,則將匹配從 cat 到 c0t 或 cAt 的任何內容,并將匹配任何單個字符 c +任何字符+單個字符 t。

*(星號)字符有點困難。它修改它前面的字符,然后匹配該字符的*零個或多個字符*。的確如此。例如,cat*可以匹配 cat、catt、cattttt 以及 ca。

示例分析:The cat ate my homework

假設我們逐行讀取一個文件,則第一行如下所示:

The cat ate my homework.

讓我們看看如何匹配該行中的模式 cat。

我們首先將該模式的首字符與句子中的首字符匹配。

如果找不到匹配項,則跳轉至該行中的下一個字符,然后再從模式的首字符開始。

如果我們找到一個匹配項,則將跳轉至模式和該行中的下一個字符,然后重復這個過程。當我們找到整個模式的匹配時,返回找到匹配項的行。

這就是正則表達式最基本、最常用的功能,即在較大的字符串中查找較小的搜索模式。

講到這里,我想大家已經(jīng)大致了解了什么是正則表達式以及它的兩個特殊字符: .(點)和 *(星號)。接下來,我會為大家介紹更多其他內容。

正則表達式三叉戟

正則表達式的各個部分可以由三個不同的組件組成:

錨點

字符集

修飾符

這三部分構成了正則表達式的三叉戟!

讓我們從三叉戟的第一個部分開始:錨點!

錨點

錨點指定個各行的模式位置。下面是兩個最重要的錨點:

^(插入符號)將模式固定到行首。例如,模式^1 匹配以 1 開頭的任意行。

$(美元符)將模式固定到句尾。例如,9$匹配以 9 結尾的任意行。

注意,在以上兩種情況下,錨點必須分別位于模式的開頭和結尾。^1 匹配行首的 1,但 1^匹配后跟^的 1。類似地,1$匹配以 1 結尾的行,但$1 匹配一個該行任意位置后跟 1 的美元符號。

字符集

三叉戟的第二部分:字符集。字符集是正則表達式的基礎。單個字符,比如 a,是最基本的字符集(一組元素)。但是 [0-9] 等正則表達式可以匹配任何一個數(shù)字,或者如果你能回想到 *的含義,則可以制作模式 [0-9][0-9](這個模式匹配的內容留給讀者作為練習)。

其他一些重要的字符集:

[0-9] 匹配 0…9 中的任何一個數(shù)字

[a-z] 匹配任何小寫字母

[A-Z] 匹配任何大寫字母

我們還可以對多個字符集進行組合:

[A-ZA-Z0-9] 匹配任何大小寫字母和單個數(shù)字。

修飾符

此部分內容沒有深入展開,以前面遇到的一個修飾符 *(星號)為例。修飾符改變它前面字符的含義。還有很多其他的修飾符,但以* 為例進行討論是一個很好的開始。

如下所示:讓我們快速將文本轉儲到文件中。

$ echo "The cat jumps long time Then we also have the fact that these are words. 1234 this is a test post please ignore." >> grep.txt

這是現(xiàn)在文件中的內容。

$ cat grep.txtThe cat jumps long timeThen we also have the fact that these are words.1234thisisatestpostpleaseignore.

尋找 cat。

$ grep "cat" grep.txtThe cat jumps long time

尋找任何以數(shù)字^[0-9] 開始的任意行。

$ grep "^[0-9]" grep.txt1234 this is a test post please ignore.

就是這樣!你剛剛使用了正則表達式。太棒了。

總結

回顧一下這篇博客的內容:

正則表達式的基本功能;

正則表達式的三個主要組件:錨點、字符集和修飾符。

.(點)、*(星號)、^(插入符)和$(美元符號)。

一些字符集 [0-9]、[a-z]、[A-Z] 和它們的組合。

這篇博客的目的是通過帶插圖的介紹使用戶更輕松地了解正則表達式。

如果能夠克服技術上的困難,則最終可以掌握這種相對簡單但功能卻很強大的正則表達式工具,從而為任何數(shù)據(jù)科學家?guī)韺氋F的價值。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 字符
    +關注

    關注

    0

    文章

    237

    瀏覽量

    26195
  • 正則表達式
    +關注

    關注

    0

    文章

    28

    瀏覽量

    3850

原文標題:新手上路:圖文解讀助你理解和使用正則表達式

文章出處:【微信號:almosthuman2014,微信公眾號:機器之心】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    布爾表達式及范圍檢查

    一個常用的布爾表達式是用于判斷變量是否位于某個范圍內, 例如,檢查一個圖形坐標是否位于一個窗口內: bool PointInRectangelArea (Point p, Rectangle
    發(fā)表于 12-12 07:08

    C語言的分支結構介紹

    1.簡單if語句 C語言中的分支結構語句中的if條件語句。 簡單if語句的基本結構如下: 代碼語言:javascript if(表達式) { 執(zhí)行代碼塊; } 其語義是:如果表達式的值為真,則執(zhí)行其后的語句,否則不執(zhí)行該語句。 注意:if()后面沒有分號,直
    發(fā)表于 11-25 07:48

    第4章 C語言基礎以及流水燈的實現(xiàn)(4.5 4.6)

    (表達式) ? ? ? ?{ ? ? ? ? ? ?循環(huán)體語句; ? ? ? ?} 在C語言里,通?!?b class='flag-5'>表達式”符合條件叫做真,不符合條件,叫做假。比如前邊i while(表達式)這個括號里的
    的頭像 發(fā)表于 11-06 11:21 ?350次閱讀

    inline ASM(內聯(lián)匯編)的細節(jié)分享

    內聯(lián)匯編,否則,仍然是帶有C++表達式的內聯(lián)江編,此時\"instructionlist\"中的寄存器的寫法需要遵守相關的規(guī)定: 寄存器前必須使用兩個百分號(%%),而不是像
    發(fā)表于 10-31 09:11

    I1電流計算對不對?怎么推導不出來I1的表達式是圖中那樣

    I1電流計算對不對?怎么推導不出來I1的表達式是圖中那樣
    發(fā)表于 09-28 18:01

    labview如何使用VISA串口資源查找的正則表達式提取串口的資源名稱?

    如圖,如何利用VISA資源查找的正則表達式從很多串口當中提取想要的目標串口(Quectel USB AT Port這個串口)?
    發(fā)表于 07-07 17:20

    基礎篇3:掌握Python中的條件語句與循環(huán)

    不同的條件執(zhí)行不同的代碼塊。Python中的條件語句主要使用if、elif(else if的縮寫)和else關鍵字。 if語句 最簡單的條件語句是if語句,它的工作方式如下: 復制代碼 if 條件表達式
    發(fā)表于 07-03 16:13

    Cubeide1.18.1在線調試改變\"現(xiàn)場表達式\"中的值提示找不到地址,為什么?

    Cubeide1.18.1在線調試時,在\"現(xiàn)場表達式\"中添加全局變量,然后改變其數(shù)值,Console窗口提示: Failed to read all registers
    發(fā)表于 06-12 06:50

    《ESP32S3 Arduino開發(fā)指南》第三章 C/C++語言基礎

    基礎,由于篇幅有限,在此僅對C/C++語言基礎進行簡單介紹。本章將分為如下9個小節(jié):3.1 數(shù)據(jù)類型3.2 運算符3.3 表達式3.4 數(shù)組3.5 字符串3.6 注釋3.7 順序結構3.8 選擇結構
    發(fā)表于 06-10 09:20

    Cubeide1.18.1在線調試改變\"現(xiàn)場表達式\"中的值提示找不到地址是怎么回事?

    Cubeide1.18.1在線調試時,在\"現(xiàn)場表達式\"中添加全局變量,然后改變其數(shù)值,Console窗口提示: Failed to read all registers
    發(fā)表于 06-10 08:26

    干貨分享 | 零基礎上手!TSMaster圖形信號表達式實操指南

    TSMaster軟件支持在圖形里面的信號表達式功能,主要用于多信號表達式運算和顯示的場景。本文將以A2L中的標定變量為例,介紹如何使用圖形中的信號表達式功能進行多信號的后處理運算和顯示。本文關鍵詞
    的頭像 發(fā)表于 06-06 20:03 ?884次閱讀
    干貨分享 | 零基礎上手!TSMaster圖形信號<b class='flag-5'>表達式</b>實操<b class='flag-5'>指南</b>

    Cubeide1.18.1在線調試改變\"現(xiàn)場表達式\"中的值提示找不到地址,怎么解決?

    Cubeide1.18.1在線調試時,在\"現(xiàn)場表達式\"中添加全局變量,然后改變其數(shù)值,Console窗口提示: Failed to read all registers
    發(fā)表于 06-06 08:27

    Cubeide1.18.1在線調試改變\"現(xiàn)場表達式\"中的值提示找不到地址怎么解決?

    Cubeide1.18.1在線調試時,在\"現(xiàn)場表達式\"中添加全局變量,然后改變其數(shù)值,Console窗口提示: Failed to read all registers
    發(fā)表于 04-27 06:18

    Linux中文本處理命令的用法

    Linux 三劍客是(grep,sed,awk)三者的簡稱,熟練使用這三個工具可以提升運維效率。Linux 三劍客以正則表達式作為基礎,而在Linux系統(tǒng)中,支持兩種正則表達式,分別為“標準正則表達式”和“擴展
    的頭像 發(fā)表于 04-15 10:22 ?761次閱讀
    Linux中文本處理命令的用法

    HarmonyOS NEXT 原生應用/元服務-ArkTS代碼調試Evaluate and log

    開發(fā)者可以通過 Evaluate and log 能力在代碼執(zhí)行到斷點行時打印開發(fā)者指定的表達式。 操作步驟 在需要打印表達式結果的地方設置斷點。 右鍵斷點,然后點擊More按鈕。 勾選
    發(fā)表于 03-14 16:49