亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Regex > 正文

正則表達式筆記三則

2020-03-16 21:12:57
字體:
來源:轉載
供稿:網友
筆記三則,貼在這里。
 
 
首字母大小寫無關模式 
有一段時間,我在寫正則表達式來匹配Drug關鍵字時,經常寫出 /viagra|cialis|anti-ed/ 這樣的表達式。為了讓它更美觀,我會給關鍵詞排序;為了提升速度,我會使用 /[Vv]iagra/ 而非/viagra/i ,只讓必要的部分進行大小寫通配模式。確切地說,我是需要對每個單詞的首字母進行大小寫無關的匹配。 

我寫了這樣的一個函數,專門用來批量轉換。 

復制代碼代碼如下:

#convert regex to sorted list, then provide both lower/upper case for the first letter of each word 
#luf means lower upper first 

sub luf{ 
# split the regex with the delimiter | 
my @arr=sort(split(//|/,shift)); 

# provide both the upper and lower case for the 
# first leffer of each word 
foreach (@arr){s//b([a-zA-Z])/[/l$1/u$1]/g;} 

# join the keyword to a regex again 
join('|',@arr); 


print luf "sex pill|viagra|cialis|anti-ed"; 
# the output is:[aA]nti-[eE]d|[cC]ialis|[sS]ex [pP]ill|[vV]iagra 

控制全局匹配下次開始的位置 

記得jyf曾經問過我,如何控制匹配開始的位置。嗯,現在我可以回答這個問題了。Perl 提供了 pos 函數,可以在 /g 全局匹配中調整下次匹配開始的位置。舉例如下: 
復制代碼代碼如下:

$_="abcdefg"; 
while(/../g) 

print $&; 

其輸出結果是每兩個字母,即ab, cd, ef 

可以使用 pos($_)來重新定位下一次匹配開始的位置,如: 

復制代碼代碼如下:

$_="abcdefg"; 
while(/../g) 

pos($_)--; #pos($_)++; 
print $&; 

輸出結果: 

復制代碼代碼如下:

pos($_)--: ab, bc, cd, de, ef, fg. 
pos($_)++: ab, de. 

可以閱讀 Perl 文檔中關于 pos的章節獲取詳細信息。 

散列與正則表達式替換 
《effective-perl-2e》第三章有這樣一個例子(見下面的代碼),將特殊符號轉義。 
復制代碼代碼如下:

my %ent = { '&' => 'amp', '<' => 'lt', '>' => 'gt' }; 
$html =~ s/([&<>])/&$ent{$1};/g; 

這個例子非常非常巧妙。它靈活地運用了散列這種數據結構,將待替換的部分作為 key ,將與其對應的替換內容作為 value 。這樣只要有匹配就會捕獲,然后將捕獲的部分作為 key ,反查到 value 并運用到替換中,體現了高級語言的效率。 

不過,這樣的 Perl 代碼,能否移植到 Python 中呢? Python 同樣支持正則,支持散列(Python 中叫做 Dictionary),但是似乎不支持在替換過程中插入太多花哨的東西(替換行內變量內插)。 

查閱 Python 的文檔,(在 shell 下 執行 python ,然后 import re,然后 help(re)),: 

復制代碼代碼如下:

sub(pattern, repl, string, count=0) 
Return the string obtained by replacing the leftmost 
non-overlapping occurrences of the pattern in string by the 
replacement repl. repl can be either a string or a callable; 
if a string, backslash escapes in it are processed. If it is 
a callable, it's passed the match object and must return 
a replacement string to be used. 

原來 python 和 php 一樣,是支持在替換的過程中使用 callable 回調函數的。該函數的默認參數是一個匹配對象變量。這樣一來,問題就簡單了: 

復制代碼代碼如下:

ent={'<':"lt", 
'>':"gt", 
'&':"amp", 


def rep(mo): 
return ent[mo.group(1)] 

html=re.sub(r"([&<>])",rep, html) 

python 替換函數 callback 的關鍵點在于其參數是一個匹配對象變量。只要明白了這一點,查一下手冊,看看該種對象都有哪些屬性,一一拿來使用,就能寫出靈活高效的 python 正則替換代碼。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产z一区二区三区| 国产精品日韩欧美综合| 欧美韩日一区二区| 国产精品福利小视频| 欧美一区三区三区高中清蜜桃| 国产激情视频一区| 亚洲欧美激情视频| 欧美大片va欧美在线播放| 成人免费视频xnxx.com| 亚洲成年人在线| 日韩欧美中文免费| 亚洲成人性视频| 一道本无吗dⅴd在线播放一区| 北条麻妃一区二区三区中文字幕| 91禁外国网站| 成人a在线观看| 久久影视免费观看| 日韩av在线免费观看一区| 国产欧美日韩中文字幕| 精品亚洲一区二区| 久久久欧美一区二区| 国产日韩中文字幕| 欧美高清理论片| 日韩在线免费av| 亚洲国产一区二区三区四区| 91在线网站视频| 亚洲精品第一国产综合精品| 亚洲第一区在线观看| 精品视频在线播放色网色视频| 欧美丰满少妇xxxxx| 久久国产精品偷| 国外成人在线播放| 日本国产高清不卡| 国产午夜精品视频| 亚洲美女精品成人在线视频| 国产精品视频内| 最近2019年好看中文字幕视频| 亚洲一区二区久久久久久| 国色天香2019中文字幕在线观看| 国产精品国产三级国产aⅴ浪潮| 亚洲日本中文字幕免费在线不卡| 久久久精品影院| 久久精品久久久久久| 这里只有精品久久| 精品久久国产精品| 亚洲第一精品夜夜躁人人躁| 亚洲美女又黄又爽在线观看| 97热在线精品视频在线观看| 国产99在线|中文| 国产主播在线一区| 91老司机精品视频| 亚洲国产精品va在线看黑人动漫| 亚洲第一天堂无码专区| 欧美伊久线香蕉线新在线| 成人免费观看网址| 91免费在线视频| 欧美国产日韩精品| 久久久国产精品一区| 欧美裸体xxxx极品少妇软件| 国产精品久久久久久久久| 尤物yw午夜国产精品视频| 美日韩丰满少妇在线观看| 欧美在线视频一二三| 亚洲天堂日韩电影| 亚洲欧美另类自拍| 亚洲成人网在线| 国产一区二区丝袜| 日韩精品在线免费播放| 亚洲午夜久久久久久久| 欧美午夜xxx| 2019中文字幕全在线观看| 久久亚洲春色中文字幕| 久久99热这里只有精品国产| 自拍偷拍亚洲欧美| 综合国产在线视频| 91在线观看免费高清| 欧美日韩在线影院| 日韩欧美主播在线| 亚洲自拍欧美色图| 九色91av视频| 乱亲女秽乱长久久久| 久久久久久国产精品三级玉女聊斋| 国产一区二区美女视频| 国产在线视频2019最新视频| 欧美日韩色婷婷| 日韩精品中文字幕视频在线| 成人免费视频网址| 亚洲国产高潮在线观看| 97精品国产97久久久久久| 国产日韩欧美电影在线观看| 亚州欧美日韩中文视频| 久久久久久12| 国产精品白丝av嫩草影院| 亚洲精品动漫久久久久| 欧美性猛交丰臀xxxxx网站| 日韩av有码在线| 国产在线视频2019最新视频| 国精产品一区一区三区有限在线| 日韩av网址在线观看| 精品中文视频在线| 日韩欧亚中文在线| 成人中文字幕+乱码+中文字幕| 亚洲天堂男人的天堂| 国产欧美中文字幕| 95av在线视频| 神马国产精品影院av| 日韩欧美成人区| 亚洲夜晚福利在线观看| 俺去亚洲欧洲欧美日韩| 国产91网红主播在线观看| 国产成人在线亚洲欧美| 欧美亚洲国产日韩2020| 亚洲自拍偷拍一区| 日韩欧美视频一区二区三区| 精品国产一区二区三区在线观看| 精品性高朝久久久久久久| 成人看片人aa| 久久偷看各类女兵18女厕嘘嘘| 亚洲色图18p| 国产日韩在线一区| 精品av在线播放| 日韩小视频在线观看| 欧美裸体xxxx极品少妇软件| 久久在线观看视频| 91精品视频一区| 日韩电影在线观看永久视频免费网站| 中文字幕av一区| 中文字幕av一区二区| 久久久久在线观看| 国产精品天天狠天天看| 日韩精品在线免费观看视频| 91最新在线免费观看| 91精品国产乱码久久久久久久久| 久久久www成人免费精品| 欧美一区二区三区精品电影| 久久精品美女视频网站| 日韩精品在线私人| 久久九九免费视频| 国产精品高潮视频| 91av在线播放视频| 91老司机精品视频| 成人免费自拍视频| 正在播放国产一区| 亚洲国产精品一区二区三区| 日韩精品一二三四区| 日本午夜精品理论片a级appf发布| 中文字幕国产亚洲2019| 欧美激情精品久久久久久| 亚洲欧美国产日韩中文字幕| 91精品免费久久久久久久久| 最近2019好看的中文字幕免费| 日韩av电影中文字幕| 中文字幕欧美精品日韩中文字幕| 91午夜在线播放| 亚洲一区二区黄| 国产精品网红福利| 国产视频久久久| 欧美大成色www永久网站婷| 成人免费大片黄在线播放| 日本三级韩国三级久久| 97av视频在线| 精品偷拍一区二区三区在线看| 精品国产一区久久久| 在线性视频日韩欧美|