【Regex】初試Python下的中文正則表示式
0x00 前言
真的是第一次在Python上做正則表示式呀……走了好多彎路,表示自己實在是笨的不行,難得實現了個小Demo,做點備忘好了。
簡要概括一下就是:英文正則親和度蠻高的,隨意;中文,轉成Unicode再說話!
0x01 參考頁面
- 正則表示式 - 教程
- 正則表示式線上測試
- 在程式裡除錯太麻煩了,有個線上的工具實時嘗試還是相當不錯的
- 30分鐘掌握正則表示式
- 這個真的不錯的,基本上入門都靠的它
- 劇透一下30分鐘學不完的 23333
0x02 正則步驟
- 轉成Unicode
- 個人是通過decode轉成unicode編碼來保證編碼一致性的,感覺笨笨的,如果有什麼好方法希望大神們能務必教教我~ ^_^
- 拍腦袋自己想個正則表示式
- 在站長工具之類的地方驗證正則效果
- 非獲取(關鍵)
(?:pattern)
匹配 pattern 但不獲取匹配結果,也就是說這是一個非獲取匹配,不進行儲存供以後使用。這在使用 “或” 字元 (|
) 來組合一個模式的各個部分是很有用。例如,'industr(?:y|ies)
就是一個比'industry|industries'
更簡略的表示式。- 單單從結論上講,java可以直接跑通的正則表示式,在python裡re.compile(xxx)時,可以試著在每個左括號的右邊加上非獲取符號(
?:
)
- 輸出的時候隨意encode成自己需要的編碼
0x03 示例程式碼
#coding=utf8
import sys
import re, os
import string
Pnumberic = re.compile(u"[\\d,\\.]+(?:\\d|萬|億)元");
Ppercent = re.compile(u"[\\d,\\.]+%");
Pzero = re.compile(u"(?:[^\\d])0(?:[^\\d])");
PDatetime = re.compile(u"(?:(?:[0-9]{4})[-/\\.年])(?:第[一二三四]季度)?[末初前後]?(?:(?:[01]?[0-9])[-/\\.月])?(?:[0-3]?[0-9]{1}[日])?" );
def LR(s):
return '{'.decode('utf-8') + s + '}'.decode('utf-8')
if __name__ == "__main__" :
each = u"聽說這個公司的淨資產為369.38億元(截至2015年9月30日),然後隨便放個12450元呀,2016年7月5日,12.34%和2.5%的百分比什麼的試試看。"
print each
print
if Pnumberic.findall(each):
#print Pnumberic.search(each).group()
for pn in Pnumberic.findall(each):
print pn
each = each.replace(pn,LR(pn))
print
if Ppercent.findall(each):
#print Ppercent.search(each).group()
for pp in Ppercent.findall(each):
print pp
each = each.replace(pp,LR(pp))
print
if PDatetime.findall(each):
#print PDatetime.search(each).group()
for dt in PDatetime.findall(each):
print dt
each = each.replace(dt,LR(dt))
print
print each
# f.write(each.encode('utf-8')+'\n')
輸出:
聽說這個公司的淨資產為369.38億元(截至2015年9月30日),然後隨便放個12450元呀,2016年7月5日,12.34%和2.5%的百分比什麼的試試看。
369.38億元
12450元
12.34%
2.5%
2015年9月30日
2016年7月5日
聽說這個公司的淨資產為{369.38億元}(截至{2015年9月30日}),然後隨便放個{12450元}呀,{2016年7月5日},{12.34%}和{2.5%}的百分比什麼的試試看。
相關推薦
【Regex】初試Python下的中文正則表示式
0x00 前言 真的是第一次在Python上做正則表示式呀……走了好多彎路,表示自己實在是笨的不行,難得實現了個小Demo,做點備忘好了。 簡要概括一下就是:英文正則親和度蠻高的,隨意;中文,轉成U
【leetcode】10. Regular Expression Matching正則表示式匹配
思維: 若p為空,若s也為空,返回true,反之返回false 若p的長度為1,若s的長度也為1,且相同或者p為’.’,那麼返回true,否則返回false; 若p的第二格字元不為*,且s是空的,那返回false,如果s不為空,且第一個字元相同,那麼開始呼叫
【轉載】萬用字元與正則表示式
字元匹配 .:匹配任意單個字元 *:匹配其前面一個字元出現任意次 ?:匹配其前面的字元1次或0次 +:匹配其前面一個字元出現至少一次(在擴充套件正則表示式中) 位置匹配 ^:錨定行首 $:錨定行尾 \<或\b:錨定詞首,其後面的任意字元必須作為單
網路爬蟲筆記【6】 Python 中的正則表示式模組與應用
python3 內建的 re 模組,包含了正則表示式的操作集。 re 模組的一般使用步驟如下: 編譯正則表示式,即使用 compile() 函式將正則表示式的字串形式編譯為一個 Pattern 物件。 對目標字串進行匹配,即通過 Pattern 物件提供的一些列方法對文字
Python網路爬蟲中的網頁中文正則表示式匹配小心得
這是第一篇部落格,關於在正則表示式的情況下通過python的re模組對爬蟲爬下的網頁資料進行正則表示式,匹配得出所有中文字元 #!/usr/bin/python # -*- coding: utf-8 -*- import re def matchURL_info(
【劍指offer】面試題19:正則表示式匹配
題目:請實現一個函式用來匹配包括'.'和'*'的正則表示式。模式中的字元'.'表示任意一個字元,而'*'表示它前面的字元可以出現任意次(包含0次)。 在本題中,匹配是指字串的所有字元匹配整個模式。 例如,字串"aaa"與模式"a.a"和"ab*ac*a"匹配,但是與"aa.a"和"ab
Python中使用中文正則表示式匹配指定的中文字串
業務場景: 從中文字句中匹配出指定的中文子字串 .這樣的情況我在工作中遇到非常多, 特梳理總結如下. 難點: 處理GBK和utf8之類的字元編碼, 同時正則匹配Pattern中包含漢字,要漢字正常發揮作用,必須非常謹慎.推薦最好統一為utf8編碼,如果不是這種最優情況,也有
Python學習 :正則表示式
正則表示式 python 使用正則表示式(re)來進行匹配引擎搜尋 正則表示式是對字串操作的一種邏輯公式,就是用事先定義好的一些特定字元、及這些特定字元的組合,組成一個“規則字串” 關於正則表示式,必須先學會它的元字元 元字元 : ^ $ * +&
python基礎:正則表示式
正則表示式是一種特殊的字串模式,用於匹配一組字串。 一: 基礎釋義 \w 匹配大小寫字母或數字或下劃線或漢字 \w+ 後面的+號的作用在前一個字元上,表示一個或多個\w,最少一個 . 匹配除換行符以外的任意字元 \s 匹配任意的空白符 \d 匹
在Python中使用正則表示式去掉字串裡的html標籤
有時候會獲得一些帶html標籤的字串,需要把html標籤去掉,獲得乾淨的字串,這時候可以使用正則表示式。 程式碼如下: import re htmeString = ''' <ul id="TopNav"> &nbs
Linux下POSIX正則表示式API使用
一、概述 在Linux環境中,經常使用正則表示式,如grep、sed、find等等,目前正則表示式有2中不同的標準,分別是Perl標準和POSIX標準,這2種風格,大體相同,稍有差別。在 C/C++的標準庫均不支援表示式,不過在C++11標準中,貌似引入了boost的正則庫,在Li
Python中利用正則表示式用逗號分割資料,但是忽略引號中的逗號的方法
一.問題描述: 我在做一個網站搜尋記錄的分割工作,原始資料如下: x= '{"嬌妻有毒路明": "0.013", "嬌妻有毒%2c陸少寵上癮": "0.078",\ "嬌妻有毒老公你放鬆點": "0.021", "嬌妻有毒陸明白芬": "0.011", "嬌妻有毒:陸少,寵上癮": "0.
Python爬蟲(正則表示式)
Python爬蟲(正則表示式) 最近接觸爬蟲比較多,下面我來展示一個剛爬取的成果,使用正則表示式的方法,希望對剛開始接觸爬蟲的小夥伴有所幫助,同時希望大佬們給予點評和指導 接下來,步入正題,使用正則表示式爬取資料是一種原始且有效的方法,正則表示式的作用即字元匹配,匹配出你想得到的
python學習 re正則表示式
一、正則的常用符號: . 匹配任一字元,換行符\n除外 * 匹配前一個字元0次或無限次 ? 匹配前一個字元0次或1次 .* 貪心演算法(儘可能多的匹配) .*? &nb
python記錄_day23 正則表示式 re模組
一、 正則表示式 使用python的re模組之前應該對正則表示式有一定的瞭解 正則表示式是對字串操作的一種邏輯公式。我們一般使用正則表示式對字串進行匹配和過濾。 正則的優缺點: 優點:靈活, 功能性強, 邏輯性強. 缺點:上手難,但一旦學會這東西非常好用 # 正則表達的組成:普通字
Python指令碼--基於正則表示式對檔案進行解析
Python指令碼--基於正則表示式對檔案進行解析 首先需要了解正則表示式中的相應指令(compile、findall),我對此的理解是compile相當於一個規則的制定者,將匹配的規則制定出來,後續具體的操作是findall的工作【選擇適當的規則
python模組-re正則表示式
元字元 . * + ? ^ $ { } [ ] - &n
python爬蟲5——正則表示式
正則表示式很好用,之前沒有體會到它的強大,在寫原生的servlet程式,呼叫微服務時,要經常拼接字串,寫sql,需求轉換成程式碼,沒有個靈活的工具處理,真的是會被煩死的。就用sublime_txt +正則表示式,賊好用! 為什麼要學正則表示式 實際上爬蟲一共就四個主要步驟:
python入門之正則表示式
正則 通過re模組實現 eg:>>>import re >>>re.findall('abc',str_name) 在strname裡面完全匹配字串abc,返回列表['abc'],有多個則返回多
Python庫-re(正則表示式)
re庫是python的一個標準庫,不需要自己用pip額外下載,直接呼叫即可。 下面介紹以下庫中函式的作用。 1.re.compile(patter, flags=0) patter是一個正則表示式字串,例如"[0-9]+",該函式返回一個模式物件(patter object),str型別 2