好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > 正則表達式筆記三則

正則表達式筆記三則

熱門標簽:自己做的電銷機器人 浙江營銷外呼系統有哪些 山東外呼系統聯系方式 哈爾濱公司外呼系統代理 地圖標注店鋪地圖標注酒店 淄博市張店區(qū)地圖標注 惠安地圖標注 遼寧秒客來電話機器人 上海銷售電銷機器人軟件
首字母大小寫無關模式
有一段時間,我在寫正則表達式來匹配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的章節(jié)獲取詳細信息。

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

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

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

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

查閱 Python 的文檔,(在 shell 下 執(zhí)行 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 正則替換代碼。

標簽:西安 無錫 泰州 重慶 長沙 銅川 綿陽 宣城

巨人網絡通訊聲明:本文標題《正則表達式筆記三則》,本文關鍵詞  正則,表達式,筆記,三則,;如發(fā)現本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《正則表達式筆記三則》相關的同類信息!
  • 本頁收集關于正則表達式筆記三則的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 亚洲一卡2卡3卡4卡5卡6卡7卡在线观看入口| 成人扒开??伸进???男男| 看黄网站在线看| 噜噜噜噜天天狠狠| 美女被扒开内裤桶屁股眼动态图| 国产做a爱片久久毛片A片漫画| 欧美日韩综合| GOGO亚洲国模私拍大尺度人体 | 小兰跪趴撅高被主人玩弄H漫画 | 宝贝~夹得好紧我进不去了| 免费无遮挡??视频小说香蕉| 男性专门网站| 修理工与人妻出轨HD电影三级| 日韩免费看片| 久久精品欧美一区二区三区不卡| 美女扒开内??看个够图片动漫| 亚洲精品影院| 日本无码又粗又长又大又硬| 国产在线视频区| xxxn日本| 国产熟妇一区二区三区aⅴ白珊珊 亚洲精品无码成人AⅤ电影荒村 | blacked最大的吊| 99久久精品免费观看国产电视| 日本经典在线三级视频| japanesetube日本护士在线| a亚洲 另类 小说 春色| 羞羞涩涩久久国产网站小说| 美女撒尿秘?部位无遮挡流血| JLZZJLZZ亚洲乱熟无码| 人人搞人人爽| 四虎成人www国产精品| 人与性动交ⅩXXXB女电影| 欧美精| 男人拔出来后女人都会流水吗| 麻豆91在线| 华娱综合性都花花世界台北| 欧美v亚洲v综合v国产v| 日本人妻免费无码虎虎影视 | 又黄又爽又刺激免费视频密乳AⅤ| 女处被黑人破苞疼哭| 午夜福利自怕|