1. 程式人生 > >【Regex】初試Python下的中文正則表示式

【Regex】初試Python下的中文正則表示式

0x00 前言

真的是第一次在Python上做正則表示式呀……走了好多彎路,表示自己實在是笨的不行,難得實現了個小Demo,做點備忘好了。
簡要概括一下就是:英文正則親和度蠻高的,隨意;中文,轉成Unicode再說話!

0x01 參考頁面

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億元(截至2015930日),然後隨便放個12450元呀,201675日,12.34%和2.5%的百分比什麼的試試看。

369.38億元
1245012.34%
2.5%

2015930201675日

聽說這個公司的淨資產為{369.38億元}(截至{2015930日}),然後隨便放個{12450元}呀,{201675日},{12.34%}和{2.5%}的百分比什麼的試試看。

相關推薦

Regex初試Python中文表示式

0x00 前言 真的是第一次在Python上做正則表示式呀……走了好多彎路,表示自己實在是笨的不行,難得實現了個小Demo,做點備忘好了。 簡要概括一下就是:英文正則親和度蠻高的,隨意;中文,轉成U

leetcode10. 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

LinuxPOSIX表示式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