Chapter 4 前後查詢

2021-07-23 12:22:10 字數 827 閱讀 7275

假設,現在有這樣乙個需求,需要從下面這則雜亂無章的文字(比如日誌)中提出所有人的姓名,所有人的姓名以"name: "開頭,逗號結尾。

name: tom, password: 123 name: kim, password: zas345

abc name: kate, password: pp456 name: peter, password: tgd343

如果使用正則:「name: \w+,」,匹配的結果如下圖,類似"name: tom,"的文字將會被匹配出來,但是我們只需要tom,首尾都是多餘的。當然,這個時候可以先將匹配的文字先取出來,然後利用sed命令將首尾都替換成空字元。這樣的「曲線救國」也可以達到目的,但是總覺得有點拖泥帶水,不夠直接。這時就可以用到正則的前後查詢來達到這個目的了。

前後查詢分為向前查詢和向後查詢,所謂向前查詢就是以某個標誌(如上個例子中的name:)開始匹配,但是不將這個標誌返回,也就是不消費它。向後查詢的意思也就不言而喻了。在正則中,可以分別用"?<="和"?="來達到這兩個目的。例如上面的例子可以用下列正規表示式將名字直接提取出來:(?<=name:) \w+(?=,),結果如下圖。需要注意的是首尾標誌和前後查詢的正則放在乙個括號裡。

我們知道,在linux或者mac系統中,可以用grep指令的-e引數來啟動正則匹配,但是如果直接用到前後查詢,會出現下圖的錯誤

在網上查詢資料,發現原因是grep指令不支援perl型別的正則,包括前後查詢。後來,找到了乙個替代的方案,就是用ack指令,具體的命令為:ack /tmp/1.txt -o --match '(?<=name: )\w*(?=,)',匹配的結果如下圖所示,確實達到了我們想要的目的。

chapter4操作列表

1 如何 遍歷 整個列表?假設有乙個列表,需要將其中每個元素列印出來。需要注意是中文輸出會報錯,參考 在geany下輸出中文的方法 解決 刪除中文後就ok了 2 在 for 迴圈後面,沒有縮排 indent 的 都只執行一次,而不會重複執行。3 python 根據縮進來判斷 行與前乙個 行的關係。避...

Chapter4 型別基礎

clr要求所有物件都用new操作符來建立 employee e new employee constructorparam1 new操作符所做的事情 1.計算型別以及所有基類中定義的例項欄位所需要的位元組數 2.在託管堆中分配指定型別要求的位元組數,分配物件的記憶體 3.它初始化物件的 型別物件指標...

Chapter 4 持久儲存資料物件

1 使用with open filename.副檔名 r w rb wb as data代替data open data.close 開啟檔案或者是寫檔案時一定要在檔名後加上副檔名,因為open 函式是根據檔名 副檔名搜尋滿足條件的檔案的。2 本章最重要的是了解到pickle 醃製 模組,此模組允許...