<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 30,  comments - 3,  trackbacks - 0
      2012年11月9日
    https://www.jianshu.com/p/ebf2e5b34aad
    posted @ 2018-11-18 16:56 Seraphi 閱讀(157) | 評(píng)論 (0)編輯 收藏
    今天換了Macbook pro來(lái)寫(xiě)畢業(yè)論文,發(fā)現(xiàn)有一大堆中文相關(guān)的問(wèn)題導(dǎo)致編譯錯(cuò)誤。經(jīng)過(guò)一晚上的研究,終于解決。主要有以下要點(diǎn):

    1. 由于MacTex對(duì)CTex的支持并不如TexLive那么好,在用pkuthss 1.7.3模板寫(xiě)論文的時(shí)候,首先需要對(duì)pkuthss.cls文件進(jìn)行修改:
    需要將原來(lái)的\LoadClass[hyperref, cs4size, fntef, fancyhdr]{ctexbook}[2011/03/11]一行改為如下形式:
    \LoadClass[fontset = windowsold,cs4size,UTF8,fancyhdr,hyperref,fntef,openany]{ctexbook}[2011/03/11]

    2.在進(jìn)行上述改動(dòng)后,發(fā)現(xiàn)還是不行。提示simhei.ttf, simsong.ttc, simfang.ttf找不到。這個(gè)時(shí)候,需要將上述三種字體超鏈接到tex的目錄下。

    具體方法如下:
    (1)在tex對(duì)應(yīng)的下列目錄建立Chinese文件夾:/usr/local/texlive/2016/texmf-dist/fonts/truetype/
    (2)將SimHei SimSong Fangsong三種字體超鏈接到上述目錄。這三種字體可以在/Library/Fonts/Microsoft中找到,注意的是放到tex下時(shí),文件名需要小寫(xiě),黑體和仿宋后綴名為.ttf,宋體為.ttc
    (3)sudo texhash

    3.再編譯的時(shí)候發(fā)現(xiàn)已經(jīng)可以了!Yeah~~~
    posted @ 2017-02-28 22:13 Seraphi 閱讀(528) | 評(píng)論 (0)編輯 收藏

    I have successfully run your code after doing the following two steps:

    1. Download GLPK from

      http://sourceforge.net/projects/winglpk/files/latest/download (as mentioned by oyvind)

    2. Unzip it into (for example) : C:\glpk_is_here\
    3. Add GLPK binaries to your system path before running python C:\>set PATH=%PATH%;C:\glpk_is_here\glpk-4.55\w64

    4. Using the same cmd window from (3), use python/ipython to run your code:
      C:\>ipython your_code.py

    5. See the results Out[4]: 2.0

    Good luck.

    posted @ 2016-05-27 14:25 Seraphi 閱讀(669) | 評(píng)論 (0)編輯 收藏

    Windows7&IIS7.5部署Discuz全攻略

    原貼:http://www.cnblogs.com/ajunForNet/archive/2012/09/12/2682063.html

    組長(zhǎng)說(shuō)在內(nèi)網(wǎng)部署一個(gè)論壇,這可難不倒我,裝個(gè)Discuz嘛。
    部署環(huán)境就一臺(tái)普通的PC,四核i3,Windows7。這就開(kāi)搞了。

    準(zhǔn)備工作

    系統(tǒng)是Windows 7 專業(yè)版,自帶IIS7.5(家庭版不帶)。IIS7開(kāi)始帶了FastCgi,對(duì)PHP支持好了許多,所以也不必裝Apache啦。
    下載 PHP 5.4、 MySQL 5.5 以及Discuz X2。

    對(duì)于IIS7 FastCgi,我們應(yīng)當(dāng)選擇VC9編譯的線程安全的版本。

    安裝PHP

    解壓PHP,我給的路徑是C:\PHP,大伙兒隨意
    把php.ini-production改名為php.ini(用于開(kāi)發(fā)環(huán)境的話,就改那個(gè)development)

    修改擴(kuò)展路徑

    extension_dir = "./ext"

    啟用MySQL擴(kuò)展(即去掉分號(hào))

    extension=php_MySQL.dll

    修改時(shí)區(qū)

    date.timezone=Asia/Shanghai

    完了可以嘗試在命令行中執(zhí)行以下PHP:

    cd C:\PHP
    php -v

    可以看到php的版本信息,如果把dll文件不存在的擴(kuò)展打開(kāi)了的話,會(huì)有提示。

    配置IIS

    IIS容易對(duì)付,不過(guò)先得把確保這幾項(xiàng)已經(jīng)裝上:

    1、添加模塊映射
    啟動(dòng)IIS管理器,對(duì)服務(wù)器設(shè)置“處理程序映射”,”添加模塊映射“:
    (圖)
    注意,設(shè)置可執(zhí)行文件路徑的時(shí)候,要選擇exe。

    2、添加index.php為默認(rèn)文檔
    對(duì)服務(wù)器設(shè)置“默認(rèn)文檔”,添加index.php


    3、創(chuàng)建新站點(diǎn)
    接著在創(chuàng)建一個(gè)新的站點(diǎn),并創(chuàng)建一個(gè)目錄存放你的網(wǎng)站,C:\Forum
    主機(jī)名填你想要綁定的域名,對(duì)于一臺(tái)服務(wù)器上有多個(gè)網(wǎng)站的情況,域名幾乎是必須的。
    當(dāng)然啦,內(nèi)網(wǎng)的話,就改hosts隨便弄個(gè)上去吧。

    4、設(shè)置程序池
    去應(yīng)用程序池,設(shè)置剛才創(chuàng)建的站點(diǎn)對(duì)應(yīng)的程序池,把.Net framework版本設(shè)成無(wú)托管代碼。

    重啟IIS,在網(wǎng)站目錄下放一個(gè)index.php,內(nèi)容很簡(jiǎn)單:
    <?php phpinfo(); ?>

    訪問(wèn)網(wǎng)站,設(shè)置無(wú)誤的話應(yīng)該能看到PHP的系統(tǒng)信息。

    安裝MySQL

    安裝MySQL挺容易的,按照Discuz給出的教程就可以了。
    因?yàn)槲蚁碌氖荱TF8版本的Discuz,所以在選擇字符編碼那一步選的UTF8。

    至于改數(shù)據(jù)庫(kù)目錄以及移動(dòng)那個(gè)dll,看上去完全沒(méi)那個(gè)必要,我也就沒(méi)弄。

    安裝Discuz

    最煩的都搞定了,最后把安裝包里upload里面的東西都復(fù)制到網(wǎng)站目錄下,
    訪問(wèn)網(wǎng)站下的install目錄就能看到安裝界面
    剩下的不用說(shuō)了吧···

    得記得安裝完了以后,進(jìn)UCenter->全局->域名設(shè)置->應(yīng)用域名,把論壇的域名給設(shè)好了,
    否則論壇首頁(yè)就是個(gè)500

    Over.

    posted @ 2013-03-11 11:09 Seraphi 閱讀(585) | 評(píng)論 (0)編輯 收藏
    nohup + 命令 + & 后臺(tái)運(yùn)行程序(連接服務(wù)器時(shí),運(yùn)行程序)
    posted @ 2013-03-06 10:38 Seraphi 閱讀(254) | 評(píng)論 (0)編輯 收藏
         摘要: LaTeX( LATEX,音譯“拉泰赫”)是一種基于TeX的排版系統(tǒng),由 美國(guó) 計(jì)算機(jī)學(xué)家 萊斯利·蘭伯特(Leslie Lamport)在20世紀(jì)80年代初期開(kāi)發(fā),利用這種格式,即使使用者沒(méi)有排版和程序設(shè)計(jì)的知識(shí)也可以充分發(fā)揮由TeX所提供的強(qiáng)大功能,能在幾天,甚至幾小時(shí)內(nèi)生成很多具有書(shū)籍質(zhì)量的印刷品。 你可以在...  閱讀全文
    posted @ 2013-02-16 13:51 Seraphi 閱讀(266) | 評(píng)論 (0)編輯 收藏

    Python正則

    初學(xué)Python,對(duì)Python的文字處理能力有很深的印象,除了str對(duì)象自帶的一些方法外,就是正則表達(dá)式這個(gè)強(qiáng)大的模塊了。但是對(duì)于初學(xué)者來(lái)說(shuō),要用好這個(gè)功能還是有點(diǎn)難度

    ,我花了好長(zhǎng)時(shí)間才摸出了點(diǎn)門道。由于我記性不好,很容易就忘事,所以還是寫(xiě)下來(lái)比較好一些,同時(shí)也可以加深印象,整理思路。

    由于我是初學(xué),所以肯定會(huì)有些錯(cuò)誤,還望高手不吝賜教,指出我的錯(cuò)誤。

    1 Python正則式的基本用法

    Python的正則表達(dá)式的模塊是‘re’,它的基本語(yǔ)法規(guī)則就是指定一個(gè)字符序列,比如你要在一個(gè)字符串s=’123abc456’中查找字符串’abc’,只要這樣寫(xiě):

    >>> import re

    >>> s='123abc456eabc789'

    >>> re.findall(r’abc’,s)

    結(jié)果就是:

    ['abc', 'abc']

    這里用到的函數(shù)”findall(rule , target [,flag] )” 是個(gè)比較直觀的函數(shù),就是在目標(biāo)字符串中查找符合規(guī)則的字符串。第一個(gè)參數(shù)是規(guī)則,第二個(gè)參數(shù)是目標(biāo)字符串,后面

    還可以跟一個(gè)規(guī)則選項(xiàng)(選項(xiàng)功能將在compile函數(shù)的說(shuō)明中詳細(xì)說(shuō)明)。返回結(jié)果結(jié)果是一個(gè)列表,中間存放的是符合規(guī)則的字符串。如果沒(méi)有符合規(guī)則的字符串被找到,就返

    回一個(gè)空列表。

     

    為什么要用r’ ..‘字符串(raw字符串)?由于正則式的規(guī)則也是由一個(gè)字符串定義的,而在正則式中大量使用轉(zhuǎn)義字符’/’,如果不用raw字符串,則在需要寫(xiě)一個(gè)’/’的地

    方,你必須得寫(xiě)成’//’,那么在要從目標(biāo)字符串中匹配一個(gè)’/’的時(shí)候,你就得寫(xiě)上4個(gè)’/’成為’////’!這當(dāng)然很麻煩,也不直觀,所以一般都使用r’’來(lái)定義規(guī)則字符

    串。當(dāng)然,某些情況下,可能不用raw字符串比較好。

     

    以上是個(gè)最簡(jiǎn)單的例子。當(dāng)然實(shí)際中這么簡(jiǎn)單的用法幾乎沒(méi)有意義。為了實(shí)現(xiàn)復(fù)雜的規(guī)則查找,re規(guī)定了若干語(yǔ)法規(guī)則。它們分為這么幾類:

    功能字符:    ‘.’ ‘*’ ‘+’ ‘|’ ‘?’ ‘^’ ‘$’ ‘/’等,它們有特殊的功能含義。特別是’/’字符,它是轉(zhuǎn)義引導(dǎo)符號(hào),跟在它后面的字符一般有特殊的含義。

    規(guī)則分界符: ‘[‘ ‘]’ ‘(’ ‘)’ ‘{‘ ‘}’等,也就是幾種括號(hào)了。

    預(yù)定義轉(zhuǎn)義字符集:“/d”  “/w” “/s” 等等,它們是以字符’/’開(kāi)頭,后面接一個(gè)特定字符的形式,用來(lái)指示一個(gè)預(yù)定義好的含義。

    其它特殊功能字符:’#’ ‘!’ ‘:’ ‘-‘等,它們只在特定的情況下表示特殊的含義,比如(?# …)就表示一個(gè)注釋,里面的內(nèi)容會(huì)被忽略。

     

    下面來(lái)一個(gè)一個(gè)的說(shuō)明這些規(guī)則的含義,不過(guò)說(shuō)明的順序并不是按照上面的順序來(lái)的,而是我認(rèn)為由淺入深,由基本到復(fù)雜的順序來(lái)編排的。同時(shí)為了直觀,在說(shuō)明的過(guò)程中盡量

    多舉些例子以方便理解。

    1.1基本規(guī)則

     

    ‘[‘  ‘]’字符集合設(shè)定符

    首先說(shuō)明一下字符集合設(shè)定的方法。由一對(duì)方括號(hào)括起來(lái)的字符,表明一個(gè)字符集合,能夠匹配包含在其中的任意一個(gè)字符。比如[abc123],表明字符’a’ ‘b’ ‘c’ ‘1’ 

    ‘2’ ‘3’都符合它的要求。可以被匹配。

    在’[‘ ‘]’中還可以通過(guò)’-‘ 減號(hào)來(lái)指定一個(gè)字符集合的范圍,比如可以用[a-zA-Z]來(lái)指定所以英文字母的大小寫(xiě),因?yàn)橛⑽淖帜甘前凑諒男〉酱蟮捻樞騺?lái)排的。你不可以

    把大小的順序顛倒了,比如寫(xiě)成[z-a]就不對(duì)了。

    如果在’[‘ ‘]’里面的開(kāi)頭寫(xiě)一個(gè)‘^’ 號(hào),則表示取非,即在括號(hào)里的字符都不匹配。如[^a-zA-Z]表明不匹配所有英文字母。但是如果‘^’不在開(kāi)頭,則它就不再是表示

    取非,而表示其本身,如[a-z^A-Z]表明匹配所有的英文字母和字符’^’。

     

    ‘|’    或規(guī)則

    將兩個(gè)規(guī)則并列起來(lái),以‘|’連接,表示只要滿足其中之一就可以匹配。比如

    [a-zA-Z]|[0-9]表示滿足數(shù)字或字母就可以匹配,這個(gè)規(guī)則等價(jià)于[a-zA-Z0-9]

    注意:關(guān)于’|’要注意兩點(diǎn):

    第一,           它在’[‘ ‘]’之中不再表示或,而表示他本身的字符。如果要在’[‘ ‘]’外面表示一個(gè)’|’字符,必須用反斜杠引導(dǎo),即’/|’ ; 

    第二,           它的有效范圍是它兩邊的整條規(guī)則,比如‘dog|cat’匹配的是‘dog’和’cat’,而不是’g’和’c’。如果想限定它的有效范圍,必需使用一個(gè)無(wú)捕獲組‘

    (?: )’包起來(lái)。比如要匹配‘I have a dog’或’I have a cat’,需要寫(xiě)成r’I have a (?:dog|cat)’,而不能寫(xiě)成r’I have a dog|cat’



    >>> s = ‘I have a dog , I have a cat’

    >>> re.findall( r’I have a (?:dog|cat)’ , s )

    ['I have a dog', 'I have a cat']                #正如我們所要的

    下面再看看不用無(wú)捕獲組會(huì)是什么后果:

    >>> re.findall( r’I have a dog|cat’ , s )

    ['I have a dog', 'cat']                                   #它將’I have a dog’和’cat’當(dāng)成兩個(gè)規(guī)則了

    至于無(wú)捕獲組的使用,后面將仔細(xì)說(shuō)明。這里先跳過(guò)。

     

    ‘.’    匹配所有字符

    匹配除換行符’/n’外的所有字符。如果使用了’S’選項(xiàng),匹配包括’/n’的所有字符。

          例:

           >>> s=’123 /n456 /n789’

           >>> findall(r‘.+’,s)

           ['123', '456', '789']

           >>> re.findall(r‘.+’ , s , re.S)

           ['123/n456/n789']

     

    ‘^’和’$’匹配字符串開(kāi)頭和結(jié)尾

    注意’^’不能在‘[ ]’中,否則含意就發(fā)生變化,具體請(qǐng)看上面的’[‘ ‘]’說(shuō)明。在多行模式下,它們可以匹配每一行的行首和行尾。具體請(qǐng)看后面compile函數(shù)說(shuō)明的’M

    ’選項(xiàng)部分

     

    ‘/d’匹配數(shù)字

    這是一個(gè)以’/’開(kāi)頭的轉(zhuǎn)義字符,’/d’表示匹配一個(gè)數(shù)字,即等價(jià)于[0-9]

    ‘/D’匹配非數(shù)字

    這個(gè)是上面的反集,即匹配一個(gè)非數(shù)字的字符,等價(jià)于[^0-9]。注意它們的大小寫(xiě)。下面我們還將看到Python的正則規(guī)則中很多轉(zhuǎn)義字符的大小寫(xiě)形式,代表互補(bǔ)的關(guān)系。這樣很

    好記。

     

    ‘/w’匹配字母和數(shù)字

    匹配所有的英文字母和數(shù)字,即等價(jià)于[a-zA-Z0-9]。

    ‘/W’匹配非英文字母和數(shù)字

    即’/w’的補(bǔ)集,等價(jià)于[^a-zA-Z0-9]。

     

    ‘/s’匹配間隔符

    即匹配空格符、制表符、回車符等表示分隔意義的字符,它等價(jià)于[ /t/r/n/f/v]。(注意最前面有個(gè)空格)

    ‘/S’匹配非間隔符

    即間隔符的補(bǔ)集,等價(jià)于[^ /t/r/n/f/v]

     

    ‘/A’匹配字符串開(kāi)頭

    匹配字符串的開(kāi)頭。它和’^’的區(qū)別是,’/A’只匹配整個(gè)字符串的開(kāi)頭,即使在’M’模式下,它也不會(huì)匹配其它行的很首。

    ‘/Z’匹配字符串結(jié)尾

    匹配字符串的結(jié)尾。它和’$’的區(qū)別是,’/Z’只匹配整個(gè)字符串的結(jié)尾,即使在’M’模式下,它也不會(huì)匹配其它各行的行尾。

    例:

    >>> s= '12 34/n56 78/n90'

    >>> re.findall( r'^/d+' , s , re.M )          #匹配位于行首的數(shù)字

    ['12', '56', '90']

    >>> re.findall( r’/A/d+’, s , re.M )        #匹配位于字符串開(kāi)頭的數(shù)字

    ['12']

    >>> re.findall( r'/d+$' , s , re.M )          #匹配位于行尾的數(shù)字

    ['34', '78', '90']

    >>> re.findall( r’/d+/Z’ , s , re.M )        #匹配位于字符串尾的數(shù)字

    ['90']

     

    ‘/b’匹配單詞邊界

    它匹配一個(gè)單詞的邊界,比如空格等,不過(guò)它是一個(gè)‘0’長(zhǎng)度字符,它匹配完的字符串不會(huì)包括那個(gè)分界的字符。而如果用’/s’來(lái)匹配的話,則匹配出的字符串中會(huì)包含那個(gè)

    分界符。

    例:

    >>> s =  'abc abcde bc bcd'

    >>> re.findall( r’/bbc/b’ , s )         #匹配一個(gè)單獨(dú)的單詞‘bc’ ,而當(dāng)它是其它單詞的一部分的時(shí)候不匹配

    ['bc']                                           #只找到了那個(gè)單獨(dú)的’bc’

    >>> re.findall( r’/sbc/s’ , s )          #匹配一個(gè)單獨(dú)的單詞‘bc’ 

    [' bc ']                                         #只找到那個(gè)單獨(dú)的’bc’,不過(guò)注意前后有兩個(gè)空格,可能有點(diǎn)看不清楚

    ‘/B’匹配非邊界

    和’/b’相反,它只匹配非邊界的字符。它同樣是個(gè)0長(zhǎng)度字符。

    接上例:

    >>> re.findall( r’/Bbc/w+’ , s )     #匹配包含’bc’但不以’bc’為開(kāi)頭的單詞

    ['bcde']                                       #成功匹配了’abcde’中的’bcde’,而沒(méi)有匹配’bcd’

     

    ‘(?:)’無(wú)捕獲組

    當(dāng)你要將一部分規(guī)則作為一個(gè)整體對(duì)它進(jìn)行某些操作,比如指定其重復(fù)次數(shù)時(shí),你需要將這部分規(guī)則用’(?:’ ‘)’把它包圍起來(lái),而不能僅僅只用一對(duì)括號(hào),那樣將得到絕對(duì)

    出人意料的結(jié)果。

    例:匹配字符串中重復(fù)的’ab’

    >>> s=’ababab abbabb aabaab’

    >>> re.findall( r’/b(?:ab)+/b’ , s )

    ['ababab']

    如果僅使用一對(duì)括號(hào),看看會(huì)是什么結(jié)果:

    >>> re.findall( r’/b(ab)+/b’ , s )

    ['ab']

    這是因?yàn)槿绻皇褂靡粚?duì)括號(hào),那么這就成為了一個(gè)組(group)。組的使用比較復(fù)雜,將在后面詳細(xì)講解。

     

    ‘(?# )’注釋

    Python允許你在正則表達(dá)式中寫(xiě)入注釋,在’(?#’ ‘)’之間的內(nèi)容將被忽略。

     

    (?iLmsux) 編譯選項(xiàng)指定

    Python的正則式可以指定一些選項(xiàng),這個(gè)選項(xiàng)可以寫(xiě)在findall或compile的參數(shù)中,也可以寫(xiě)在正則式里,成為正則式的一部分。這在某些情況下會(huì)便利一些。具體的選項(xiàng)含義請(qǐng)

    看后面的compile函數(shù)的說(shuō)明。

    此處編譯選項(xiàng)’i’等價(jià)于IGNORECASE ,L 等價(jià)于 LOCAL ,m 等價(jià)于 MULTILINE,s等價(jià)于 DOTALL ,u等價(jià)于UNICODE , x 等價(jià)于 VERBOSE。

    請(qǐng)注意它們的大小寫(xiě)。在使用時(shí)可以只指定一部分,比如只指定忽略大小寫(xiě),可寫(xiě)為‘(?i)’,要同時(shí)忽略大小寫(xiě)并使用多行模式,可以寫(xiě)為‘(?im)’。

    另外要注意選項(xiàng)的有效范圍是整條規(guī)則,即寫(xiě)在規(guī)則的任何地方,選項(xiàng)都會(huì)對(duì)全部整條正則式有效。

     

     

    1.2重復(fù)

    正則式需要匹配不定長(zhǎng)的字符串,那就一定需要表示重復(fù)的指示符。Python的正則式表示重復(fù)的功能很豐富靈活。重復(fù)規(guī)則的一般的形式是在一條字符規(guī)則后面緊跟一個(gè)表示重復(fù)

    次數(shù)的規(guī)則,已表明需要重復(fù)前面的規(guī)則一定的次數(shù)。重復(fù)規(guī)則有:

    ‘*’   0或多次匹配

    表示匹配前面的規(guī)則0次或多次。

    ‘+’   1次或多次匹配

    表示匹配前面的規(guī)則至少1次,可以多次匹配

    例:匹配以下字符串中的前一部分是字母,后一部分是數(shù)字或沒(méi)有的變量名字

    >>> s = ‘ aaa bbb111 cc22cc 33dd ‘

    >>> re.findall( r’/b[a-z]+/d*/b’ , s )             #必須至少1個(gè)字母開(kāi)頭,以連續(xù)數(shù)字結(jié)尾或沒(méi)有數(shù)字

    ['aaa', 'bbb111']

    注意上例中規(guī)則前后加了表示單詞邊界的’/b’指示符,如果不加的話結(jié)果就會(huì)變成:

    >>> re.findall( r’[a-z]+/d*’ , s )

    ['aaa', 'bbb111', 'cc22', 'cc', 'dd']    #把單詞給拆開(kāi)了

    大多數(shù)情況下這不是我們期望的結(jié)果。

     

    ‘?’   0或1次匹配

    只匹配前面的規(guī)則0次或1次。

    例,匹配一個(gè)數(shù)字,這個(gè)數(shù)字可以是一個(gè)整數(shù),也可以是一個(gè)科學(xué)計(jì)數(shù)法記錄的數(shù)字,比如123和10e3都是正確的數(shù)字。

    >>> s = ‘ 123 10e3 20e4e4 30ee5 ‘

    >>> re.findall( r’ /b/d+[eE]?/d*/b’ , s )

    ['123', '10e3']

    它正確匹配了123和10e3,正是我們期望的。注意前后的’/b’的使用,否則將得到不期望的結(jié)果。

     

    1.2.1 精確匹配和最小匹配

    Python正則式還可以精確指定匹配的次數(shù)。指定的方式是

    ‘{m}’      精確匹配m次

    ‘{m,n}’   匹配最少m次,最多n次。(n>m)

    如果你只想指定一個(gè)最少次數(shù)或只指定一個(gè)最多次數(shù),你可以把另外一個(gè)參數(shù)空起來(lái)。比如你想指定最少3次,可以寫(xiě)成{3,}(注意那個(gè)逗號(hào)),同樣如果只想指定最大為5次,可

    以寫(xiě)成{,5},也可以寫(xiě)成{0,5}。

    例尋找下面字符串中

    a:3位數(shù)

    b: 2位數(shù)到4位數(shù)

    c: 5位數(shù)以上的數(shù)

    d: 4位數(shù)以下的數(shù)

    >>> s= ‘ 1 22 333 4444 55555 666666 ‘

    >>> re.findall( r’/b/d{3}/b’ , s )            # a:3位數(shù)

    ['333']

    >>> re.findall( r’/b/d{2,4}/b’ , s )         # b: 2位數(shù)到4位數(shù)

    ['22', '333', '4444']

    >>> re.findall( r’/b/d{5,}/b’, s )           # c: 5位數(shù)以上的數(shù)

    ['55555', '666666']

    >>> re.findall( r’/b/d{1,4}/b’ , s )         # 4位數(shù)以下的數(shù)

    ['1', '22', '333', '4444']

     

    ‘*?’ ‘+?’ ‘??’最小匹配

    ‘*’ ‘+’ ‘?’通常都是盡可能多的匹配字符。有時(shí)候我們希望它盡可能少的匹配。比如一個(gè)c語(yǔ)言的注釋‘/* part 1 */ /* part 2 */’,如果使用最大規(guī)則:

    >>> s =r ‘/* part 1 */ code /* part 2 */’

    >>> re.findall( r’//*.*/*/’ , s )

    [‘/* part 1 */ code /* part 2 */’]

    結(jié)果把整個(gè)字符串都包括進(jìn)去了。如果把規(guī)則改寫(xiě)成

    >>> re.findall( r’//*.*?/*/’ , s )                    #在*后面加上?,表示盡可能少的匹配

    ['/* part 1 */', '/* part 2 */']

    結(jié)果正確的匹配出了注釋里的內(nèi)容

     

    1.3   前向界定與后向界定

    有時(shí)候需要匹配一個(gè)跟在特定內(nèi)容后面的或者在特定內(nèi)容前面的字符串,Python提供一個(gè)簡(jiǎn)便的前向界定和后向界定功能,或者叫前導(dǎo)指定和跟從指定功能。它們是:

    ‘(?<=…)’前向界定

    括號(hào)中’…’代表你希望匹配的字符串的前面應(yīng)該出現(xiàn)的字符串。

    ‘(?=…)’  后向界定

    括號(hào)中的’…’代表你希望匹配的字符串后面應(yīng)該出現(xiàn)的字符串。

    例:你希望找出c語(yǔ)言的注釋中的內(nèi)容,它們是包含在’/*’和’*/’之間,不過(guò)你并不希望匹配的結(jié)果把’/*’和’*/’也包括進(jìn)來(lái),那么你可以這樣用:

    >>> s=r’/* comment 1 */  code  /* comment 2 */’

    >>> re.findall( r’(?<=//*).+?(?=/*/)’ , s )

    [' comment 1 ', ' comment 2 ']

    注意這里我們?nèi)匀皇褂昧俗钚∑ヅ洌员苊獍颜麄€(gè)字符串給匹配進(jìn)去了。

    要注意的是,前向界定括號(hào)中的表達(dá)式必須是常值,也即你不可以在前向界定的括號(hào)里寫(xiě)正則式。比如你如果在下面的字符串中想找到被字母夾在中間的數(shù)字,你不可以用前向界

    定:

    例:

    >>> s = ‘aaa111aaa , bbb222 , 333ccc ‘

    >>> re.findall( r’(?<=[a-z]+)/d+(?=[a-z]+)' , s )          #錯(cuò)誤的用法

    它會(huì)給出一個(gè)錯(cuò)誤信息:

    error: look-behind requires fixed-width pattern

     

    不過(guò)如果你只要找出后面接著有字母的數(shù)字,你可以在后向界定寫(xiě)正則式:

    >>> re.findall( r’/d+(?=[a-z]+)’, s )

    ['111', '333']

    如果你一定要匹配包夾在字母中間的數(shù)字,你可以使用組(group)的方式

    >>> re.findall (r'[a-z]+(/d+)[a-z]+' , s )

    ['111']

    組的使用將在后面詳細(xì)講解。

     

    除了前向界定前向界定和后向界定外,還有前向非界定和后向非界定,它的寫(xiě)法為:

    ‘(?<!...)’前向非界定

    只有當(dāng)你希望的字符串前面不是’…’的內(nèi)容時(shí)才匹配

    ‘(?!...)’后向非界定

    只有當(dāng)你希望的字符串后面不跟著’…’內(nèi)容時(shí)才匹配。

    接上例,希望匹配后面不跟著字母的數(shù)字

    >>> re.findall( r’/d+(?!/w+)’ , s )

    ['222']

    注意這里我們使用了/w而不是像上面那樣用[a-z],因?yàn)槿绻@樣寫(xiě)的話,結(jié)果會(huì)是:

    >>> re.findall( r’/d+(?![a-z]+)’ , s )

    ['11', '222', '33']

    這和我們期望的似乎有點(diǎn)不一樣。它的原因,是因?yàn)?#8217;111’和’222’中的前兩個(gè)數(shù)字也是滿足這個(gè)要求的。因此可看出,正則式的使用還是要相當(dāng)小心的,因?yàn)槲议_(kāi)始就是這樣

    寫(xiě)的,看到結(jié)果后才明白過(guò)來(lái)。不過(guò)Python試驗(yàn)起來(lái)很方便,這也是腳本語(yǔ)言的一大優(yōu)點(diǎn),可以一步一步的試驗(yàn),快速得到結(jié)果,而不用經(jīng)過(guò)煩瑣的編譯、鏈接過(guò)程。也因此學(xué)習(xí)

    Python就要多試,跌跌撞撞的走過(guò)來(lái),雖然曲折,卻也很有樂(lè)趣。

     

    1.4組的基本知識(shí)

    上面我們已經(jīng)看過(guò)了Python的正則式的很多基本用法。不過(guò)如果僅僅是上面那些規(guī)則的話,還是有很多情況下會(huì)非常麻煩,比如上面在講前向界定和后向界定時(shí),取夾在字母中間

    的數(shù)字的例子。用前面講過(guò)的規(guī)則都很難達(dá)到目的,但是用了組以后就很簡(jiǎn)單了。

    ‘(‘’)’       無(wú)命名組

    最基本的組是由一對(duì)圓括號(hào)括起來(lái)的正則式。比如上面匹配包夾在字母中間的數(shù)字的例子中使用的(/d+),我們?cè)倩仡櫼幌逻@個(gè)例子:

    >>> s = ‘aaa111aaa , bbb222 , 333ccc ‘

    >>> re.findall (r'[a-z]+(/d+)[a-z]+' , s )

    ['111']

    可以看到findall函數(shù)只返回了包含在’()’中的內(nèi)容,而雖然前面和后面的內(nèi)容都匹配成功了,卻并不包含在結(jié)果中。

     

    除了最基本的形式外,我們還可以給組起個(gè)名字,它的形式是

    ‘(?P<name>…)’命名組

    ‘(?P’代表這是一個(gè)Python的語(yǔ)法擴(kuò)展’<…>’里面是你給這個(gè)組起的名字,比如你可以給一個(gè)全部由數(shù)字組成的組叫做’num’,它的形式就是’(?P<num>/d+)’。起了名字之

    后,我們就可以在后面的正則式中通過(guò)名字調(diào)用這個(gè)組,它的形式是

    ‘(?P=name)’調(diào)用已匹配的命名組

    要注意,再次調(diào)用的這個(gè)組是已被匹配的組,也就是說(shuō)它里面的內(nèi)容是和前面命名組里的內(nèi)容是一樣的。

    我們可以看更多的例子:請(qǐng)注意下面這個(gè)字符串各子串的特點(diǎn)。

    >>> s='aaa111aaa,bbb222,333ccc,444ddd444,555eee666,fff777ggg'

    我們看看下面的正則式會(huì)返回什么樣的結(jié)果:

    >>> re.findall( r'([a-z]+)/d+([a-z]+)' , s )             #找出中間夾有數(shù)字的字母

    [('aaa', 'aaa'), ('fff', 'ggg')]

    >>> re.findall( r '(?P<g1>[a-z]+)/d+(?P=g1)' , s ) #找出被中間夾有數(shù)字的前后同樣的字母

    ['aaa']

    >>> re.findall( r'[a-z]+(/d+)([a-z]+)' , s )             #找出前面有字母引導(dǎo),中間是數(shù)字,后面是字母的字符串中的中間的數(shù)字和后面的字母

    [('111', 'aaa'), ('777', 'ggg')]

     

    我們可以通過(guò)命名組的名字在后面調(diào)用已匹配的命名組,不過(guò)名字也不是必需的。

    ‘/number’             通過(guò)序號(hào)調(diào)用已匹配的組

    正則式中的每個(gè)組都有一個(gè)序號(hào),序號(hào)是按組從左到右,從1開(kāi)始的數(shù)字,你可以通過(guò)下面的形式來(lái)調(diào)用已匹配的組

    比如上面找出被中間夾有數(shù)字的前后同樣的字母的例子,也可以寫(xiě)成:

    >>> re.findall( r’([a-z]+)/d+/1’ , s )

    ['aaa']

    結(jié)果是一樣的。

    我們?cè)倏匆粋€(gè)例子

    >>> s='111aaa222aaa111 , 333bbb444bb33'

    >>> re.findall( r'(/d+)([a-z]+)(/d+)(/2)(/1)' , s )           #找出完全對(duì)稱的數(shù)字-字母-數(shù)字-字母-數(shù)字中的數(shù)字和字母

    [('111', 'aaa', '222', 'aaa', '111')]

     

    Python2.4以后的re模塊,還加入了一個(gè)新的條件匹配功能

    ‘(?(id/name)yes-pattern|no-pattern)’ 判斷指定組是否已匹配,執(zhí)行相應(yīng)的規(guī)則

    這個(gè)規(guī)則的含義是,如果id/name指定的組在前面匹配成功了,則執(zhí)行yes-pattern的正則式,否則執(zhí)行no-pattern的正則式。

    舉個(gè)例子,比如要匹配一些形如usr@mail的郵箱地址,不過(guò)有的寫(xiě)成< usr@mail >即用一對(duì)<>括起來(lái),有點(diǎn)則沒(méi)有,要匹配這兩種情況,可以這樣寫(xiě)

    >>> s='<usr1@mail1>  usr2@maill2'

    >>> re.findall( r'(<)?/s*(/w+@/w+)/s*(?(1)>)' , s )

    [('<', 'usr1@mail1'), ('', 'usr2@maill2')]

    不過(guò)如果目標(biāo)字符串如下

    >>> s='<usr1@mail1>  usr2@maill2 <usr3@mail3   usr4@mail4>  < usr5@mail5 '

    而你想得到要么由一對(duì)<>包圍起來(lái)的一個(gè)郵件地址,要么得到一個(gè)沒(méi)有被<>包圍起來(lái)的地址,但不想得到一對(duì)<>中間包圍的多個(gè)地址或不完整的<>中的地址,那么使用這個(gè)式子并

    不能得到你想要的結(jié)果

    >>> re.findall( r'(<)?/s*(/w+@/w+)/s*(?(1)>)' , s )

    [('<', 'usr1@mail1'), ('', 'usr2@maill2'), ('', 'usr3@mail3'), ('', 'usr4@mail4'), ('', 'usr5@mail5')]

    它仍然找到了所有的郵件地址。

    想要實(shí)現(xiàn)這個(gè)功能,單純的使用findall有點(diǎn)吃力,需要使用其它的一些函數(shù),比如match或search函數(shù),再配合一些控制功能。這部分的內(nèi)容將在下面詳細(xì)講解。

     

    小結(jié):以上基本上講述了Python正則式的語(yǔ)法規(guī)則。雖然大部分語(yǔ)法規(guī)則看上去都很簡(jiǎn)單,可是稍不注意,仍然會(huì)得到與期望大相徑庭的結(jié)果,所以要寫(xiě)好正則式,需要仔細(xì)的體

    會(huì)正則式規(guī)則的含義后不同規(guī)則之間細(xì)微的差別。

    詳細(xì)的了解了規(guī)則后,再配合后面就要介紹的功能函數(shù),就能最大的發(fā)揮正則式的威力了。

     

    2 re模塊的基本函數(shù)

    在上面的說(shuō)明中,我們已經(jīng)對(duì)re模塊的基本函數(shù)‘findall’很熟悉了。當(dāng)然如果光有findall的話,很多功能是不能實(shí)現(xiàn)的。下面開(kāi)始介紹一下re模塊其它的常用基本函數(shù)。靈活

    搭配使用這些函數(shù),才能充分發(fā)揮Python正則式的強(qiáng)大功能。

    首先還是說(shuō)下老熟人findall函數(shù)吧

    findall(rule , target [,flag] )

    在目標(biāo)字符串中查找符合規(guī)則的字符串。

    第一個(gè)參數(shù)是規(guī)則,第二個(gè)參數(shù)是目標(biāo)字符串,后面還可以跟一個(gè)規(guī)則選項(xiàng)(選項(xiàng)功能將在compile函數(shù)的說(shuō)明中詳細(xì)說(shuō)明)。

    返回結(jié)果結(jié)果是一個(gè)列表,中間存放的是符合規(guī)則的字符串。如果沒(méi)有符合規(guī)則的字符串被找到,就返回一個(gè)空列表。

    2.1使用compile加速

    compile( rule [,flag] )

    將正則規(guī)則編譯成一個(gè)Pattern對(duì)象,以供接下來(lái)使用。

    第一個(gè)參數(shù)是規(guī)則式,第二個(gè)參數(shù)是規(guī)則選項(xiàng)。

    返回一個(gè)Pattern對(duì)象

    直接使用findall ( rule , target )的方式來(lái)匹配字符串,一次兩次沒(méi)什么,如果是多次使用的話,由于正則引擎每次都要把規(guī)則解釋一遍,而規(guī)則的解釋又是相當(dāng)費(fèi)時(shí)間的,

    所以這樣的效率就很低了。如果要多次使用同一規(guī)則來(lái)進(jìn)行匹配的話,可以使用re.compile函數(shù)來(lái)將規(guī)則預(yù)編譯,使用編譯過(guò)返回的Regular Expression Object或叫做Pattern對(duì)

    象來(lái)進(jìn)行查找。



    >>> s='111,222,aaa,bbb,ccc333,444ddd'

    >>> rule=r’/b/d+/b’

    >>> compiled_rule=re.compile(rule)

    >>> compiled_rule.findall(s)

    ['111', '222']

    可見(jiàn)使用compile過(guò)的規(guī)則使用和未編譯的使用很相似。compile函數(shù)還可以指定一些規(guī)則標(biāo)志,來(lái)指定一些特殊選項(xiàng)。多個(gè)選項(xiàng)之間用’|’(位或)連接起來(lái)。

    I      IGNORECASE 忽略大小寫(xiě)區(qū)別。

     

    L   LOCAL  字符集本地化。這個(gè)功能是為了支持多語(yǔ)言版本的字符集使用環(huán)境的,比如在轉(zhuǎn)義符/w,在英文環(huán)境下,它代表[a-zA-Z0-9],即所以英文字符和數(shù)字。如果在一個(gè)法

    語(yǔ)環(huán)境下使用,缺省設(shè)置下,不能匹配"é"或"ç"。加上這L選項(xiàng)和就可以匹配了。不過(guò)這個(gè)對(duì)于中文環(huán)境似乎沒(méi)有什么用,它仍然不能匹配中文字符。

     

    M    MULTILINE  多行匹配。在這個(gè)模式下’^’(代表字符串開(kāi)頭)和’$’(代表字符串結(jié)尾)將能夠匹配多行的情況,成為行首和行尾標(biāo)記。比如

    >>> s=’123 456/n789 012/n345 678’

    >>> rc=re.compile(r’^/d+’)    #匹配一個(gè)位于開(kāi)頭的數(shù)字,沒(méi)有使用M選項(xiàng)

    >>> rc.findall(s)

    ['123']             #結(jié)果只能找到位于第一個(gè)行首的’123’

    >>> rcm=re.compile(r’^/d+’,re.M)       #使用M選項(xiàng)

    >>> rcm.findall(s)

    ['123', '789', '345']  #找到了三個(gè)行首的數(shù)字

    同樣,對(duì)于’$’來(lái)說(shuō),沒(méi)有使用M選項(xiàng),它將匹配最后一個(gè)行尾的數(shù)字,即’678’,加上以后,就能匹配三個(gè)行尾的數(shù)字456 012和678了.

    >>> rc=re.compile(r’/d+$’)

    >>> rcm=re.compile(r’/d+$’,re.M)

    >>> rc.findall(s)

    ['678']

    >>> rcm.findall(s)

    ['456', '012', '678']

     

    S     DOTALL       ‘.’號(hào)將匹配所有的字符。缺省情況下’.’匹配除換行符’/n’外的所有字符,使用這一選項(xiàng)以后,’.’就能匹配包括’/n’的任何字符了。

     

    U   UNICODE       /w,/W,/b,/B,/d,/D,/s和/S都將使用Unicode。

     

    X     VERBOSE     這個(gè)選項(xiàng)忽略規(guī)則表達(dá)式中的空白,并允許使用’#’來(lái)引導(dǎo)一個(gè)注釋。這樣可以讓你把規(guī)則寫(xiě)得更美觀些。比如你可以把規(guī)則
    >>> rc = re.compile(r"/d+|[a-zA-Z]+")       #匹配一個(gè)數(shù)字或者單詞

    使用X選項(xiàng)寫(xiě)成:
    >>> rc = re.compile(r"""  # start a rule/d+                   # number| [a-zA-Z]+           # word""", re.VERBOSE)在這個(gè)模式下,如果你想匹配一個(gè)空格,你必須

    用'/ '的形式('/'后面跟一個(gè)空格)

     

     

    2.2 match與search

    match( rule , targetString [,flag] )

    search( rule , targetString [,flag] )

    (注:re的match與search函數(shù)同compile過(guò)的Pattern對(duì)象的match與search函數(shù)的參數(shù)是不一樣的。Pattern對(duì)象的match與search函數(shù)更為強(qiáng)大,是真正最常用的函數(shù))

    按照規(guī)則在目標(biāo)字符串中進(jìn)行匹配。

    第一個(gè)參數(shù)是正則規(guī)則,第二個(gè)是目標(biāo)字符串,第三個(gè)是選項(xiàng)(同compile函數(shù)的選項(xiàng))

    返回:若成功返回一個(gè)Match對(duì)象,失敗無(wú)返回

    findall雖然很直觀,但是在進(jìn)行更復(fù)雜的操作時(shí),就有些力不從心了。此時(shí)更多的使用的是match和search函數(shù)。他們的參數(shù)和findall是一樣的,都是:

    match( rule , targetString [,flag] )

    search( rule , targetString [,flag] )

    不過(guò)它們的返回不是一個(gè)簡(jiǎn)單的字符串列表,而是一個(gè)MatchObject(如果匹配成功的話).。通過(guò)操作這個(gè)matchObject,我們可以得到更多的信息。

    需要注意的是,如果匹配不成功,它們則返回一個(gè)NoneType。所以在對(duì)匹配完的結(jié)果進(jìn)行操作之前,你必需先判斷一下是否匹配成功了,比如:

    >>> m=re.match( rule , target )

    >>> if m:                       #必需先判斷是否成功

            doSomethin

    這兩個(gè)函數(shù)唯一的區(qū)別是:match從字符串的開(kāi)頭開(kāi)始匹配,如果開(kāi)頭位置沒(méi)有匹配成功,就算失敗了;而search會(huì)跳過(guò)開(kāi)頭,繼續(xù)向后尋找是否有匹配的字符串。針對(duì)不同的需

    要,可以靈活使用這兩個(gè)函數(shù)。

    關(guān)于match返回的MatchObject如果使用的問(wèn)題,是Python正則式的精髓所在,它與組的使用密切相關(guān)。我將在下一部分詳細(xì)講解,這里只舉個(gè)最簡(jiǎn)單的例子:

    例:

    >>> s= 'Tom:9527 , Sharry:0003'

    >>> m=re.match( r'(?P<name>/w+):(?P<num>/d+)' , s )

    >>> m.group()

    'Tom:9527'

    >>> m.groups()

    ('Tom', '9527')

    >>> m.group(‘name’)

    'Tom'

    >>> m.group(‘num’)

    '9527'

     

    2.3 finditer

    finditer( rule , target [,flag] )

    參數(shù)同findall

    返回一個(gè)迭代器

    finditer函數(shù)和findall函數(shù)的區(qū)別是,findall返回所有匹配的字符串,并存為一個(gè)列表,而finditer則并不直接返回這些字符串,而是返回一個(gè)迭代器。關(guān)于迭代器,解釋起來(lái)

    有點(diǎn)復(fù)雜,還是看看例子把:

    >>> s=’111 222 333 444’

    >>> for i in re.finditer(r’/d+’ , s ):

            print i.group(),i.span()          #打印每次得到的字符串和起始結(jié)束位置

    結(jié)果是

    111 (0, 3)

    222 (4, 7)

    333 (8, 11)

    444 (12, 15)

    簡(jiǎn)單的說(shuō)吧,就是finditer返回了一個(gè)可調(diào)用的對(duì)象,使用for i in finditer()的形式,可以一個(gè)一個(gè)的得到匹配返回的Match對(duì)象。這在對(duì)每次返回的對(duì)象進(jìn)行比較復(fù)雜的操作

    時(shí)比較有用。

     

    2.4字符串的替換和修改

    re模塊還提供了對(duì)字符串的替換和修改函數(shù),他們比字符串對(duì)象提供的函數(shù)功能要強(qiáng)大一些。這幾個(gè)函數(shù)是

    sub ( rule , replace , target [,count] )

    subn(rule , replace , target [,count] )

    在目標(biāo)字符串中規(guī)格規(guī)則查找匹配的字符串,再把它們替換成指定的字符串。你可以指定一個(gè)最多替換次數(shù),否則將替換所有的匹配到的字符串。

    第一個(gè)參數(shù)是正則規(guī)則,第二個(gè)參數(shù)是指定的用來(lái)替換的字符串,第三個(gè)參數(shù)是目標(biāo)字符串,第四個(gè)參數(shù)是最多替換次數(shù)。

    這兩個(gè)函數(shù)的唯一區(qū)別是返回值。

    sub返回一個(gè)被替換的字符串

    sub返回一個(gè)元組,第一個(gè)元素是被替換的字符串,第二個(gè)元素是一個(gè)數(shù)字,表明產(chǎn)生了多少次替換。

    例,將下面字符串中的’dog’全部替換成’cat’

    >>> s=’ I have a dog , you have a dog , he have a dog ‘

    >>> re.sub( r’dog’ , ‘cat’ , s )

    ' I have a cat , you have a cat , he have a cat '

    如果我們只想替換前面兩個(gè),則

    >>> re.sub( r’dog’ , ‘cat’ , s , 2 )

    ' I have a cat , you have a cat , he have a dog '

    或者我們想知道發(fā)生了多少次替換,則可以使用subn

    >>> re.subn( r’dog’ , ‘cat’ , s )

    (' I have a cat , you have a cat , he have a cat ', 3)

     

    split( rule , target [,maxsplit] )

    切片函數(shù)。使用指定的正則規(guī)則在目標(biāo)字符串中查找匹配的字符串,用它們作為分界,把字符串切片。

    第一個(gè)參數(shù)是正則規(guī)則,第二個(gè)參數(shù)是目標(biāo)字符串,第三個(gè)參數(shù)是最多切片次數(shù)

    返回一個(gè)被切完的子字符串的列表

    這個(gè)函數(shù)和str對(duì)象提供的split函數(shù)很相似。舉個(gè)例子,我們想把上例中的字符串被’,’分割開(kāi),同時(shí)要去掉逗號(hào)前后的空格

    >>> s=’ I have a dog   ,   you have a dog  ,  he have a dog ‘

    >>> re.split( ‘/s*,/s*’ , s )

    [' I have a dog', 'you have a dog', 'he have a dog ']

    結(jié)果很好。如果使用str對(duì)象的split函數(shù),則由于我們不知道’,’兩邊會(huì)有多少個(gè)空格,而不得不對(duì)結(jié)果再進(jìn)行一次處理。

     

    escape( string )

    這是個(gè)功能比較古怪的函數(shù),它的作用是將字符串中的non-alphanumerics字符(我已不知道該怎么翻譯比較好了)用反義字符的形式顯示出來(lái)。有時(shí)候你可能希望在正則式中匹

    配一個(gè)字符串,不過(guò)里面含有很多re使用的符號(hào),你要一個(gè)一個(gè)的修改寫(xiě)法實(shí)在有點(diǎn)麻煩,你可以使用這個(gè)函數(shù),

    例在目標(biāo)字符串s中匹配’(*+?)’這個(gè)子字符串

    >>> s= ‘111 222 (*+?) 333’

    >>> rule= re.escape( r’(*+?)’ )

    >>> print rule

    /(/*/+/?/)

    >>> re.findall( rule , s )

    ['(*+?)']

    3     更深入的了解re的組與對(duì)象

    前面對(duì)Python正則式的組進(jìn)行了一些簡(jiǎn)單的介紹,由于還沒(méi)有介紹到match對(duì)象,而組又是和match對(duì)象密切相關(guān)的,所以必須將它們結(jié)合起來(lái)介紹才能充分地說(shuō)明它們的用途。

    不過(guò)再詳細(xì)介紹它們之前,我覺(jué)得有必要先介紹一下將規(guī)則編譯后的生成的patter對(duì)象

    3.1編譯后的Pattern對(duì)象

    將一個(gè)正則式,使用compile函數(shù)編譯,不僅是為了提高匹配的速度,同時(shí)還能使用一些附加的功能。編譯后的結(jié)果生成一個(gè)Pattern對(duì)象,這個(gè)對(duì)象里面有很多函數(shù),他們看起來(lái)

    和re模塊的函數(shù)非常象,它同樣有findall , match , search ,finditer , sub , subn , split這些函數(shù),只不過(guò)它們的參數(shù)有些小小的不同。一般說(shuō)來(lái),re模塊函數(shù)的第一個(gè)

    參數(shù),即正則規(guī)則不再需要了,應(yīng)為規(guī)則就包含在Pattern對(duì)象中了,編譯選項(xiàng)也不再需要了,因?yàn)橐呀?jīng)被編譯過(guò)了。因此re模塊中函數(shù)的這兩個(gè)參數(shù)的位置,就被后面的參數(shù)取

    代了。

    findall , match , search和finditer這幾個(gè)函數(shù)的參數(shù)是一樣的,除了少了規(guī)則和選項(xiàng)兩個(gè)參數(shù)外,它們又加入了另外兩個(gè)參數(shù),它們是:查找開(kāi)始位置和查找結(jié)束位置,也就

    是說(shuō),現(xiàn)在你可以指定查找的區(qū)間,除去你不感興趣的區(qū)間。它們現(xiàn)在的參數(shù)形式是:

    findall ( targetString [, startPos [,endPos] ] )

    finditer ( targetString [, startPos [,endPos] ] )

    match ( targetString [, startPos [,endPos] ] )

    search ( targetString [, startPos [,endPos] ] )

    這些函數(shù)的使用和re模塊的同名函數(shù)使用完全一樣。所以就不多介紹了。

     

    除了和re模塊的函數(shù)同樣的函數(shù)外,Pattern對(duì)象還多了些東西,它們是:

    flags       查詢編譯時(shí)的選項(xiàng)

    pattern查詢編譯時(shí)的規(guī)則

    groupindex規(guī)則里的組

    這幾個(gè)不是函數(shù),而是一個(gè)值。它們提供你一些規(guī)則的信息。比如下面這個(gè)例子

    >>> p=re.compile( r'(?P<word>/b[a-z]+/b)|(?P<num>/b/d+/b)|(?P<id>/b[a-z_]+/w*/b)' , re.I )

    >>> p.flags

    2

    >>> p.pattern

    '(?P<word>//b[a-z]+//b)|(?P<num>//b//d+//b)|(?P<id>//b[a-z_]+//w*//b)'

    >>> p.groupindex

    {'num': 2, 'word': 1, 'id': 3}

    我們來(lái)分析一下這個(gè)例子:這個(gè)正則式是匹配單詞、或數(shù)字、或一個(gè)由字母或’_’開(kāi)頭,后面接字母或數(shù)字的一個(gè)ID。我們給這三種情況的規(guī)則都包入了一個(gè)命名組,分別命名

    為’word’ , ‘num’和‘id’。我們規(guī)定大小寫(xiě)不敏感,所以使用了編譯選項(xiàng)‘I’。

    編譯以后返回的對(duì)象為p,通過(guò)p.flag我們可以查看編譯時(shí)的選項(xiàng),不過(guò)它顯示的不是’I’,而是一個(gè)數(shù)值2。其實(shí)re.I是一個(gè)整數(shù),2就是它的值。我們可以查看一下:

    >>> re.I

    2

    >>> re.L

    4

    >>> re.M

    8



    每個(gè)選項(xiàng)都是一個(gè)數(shù)值。

    通過(guò)p.pattern可以查看被編譯的規(guī)則是什么。使用print的話會(huì)更好看一些

    >>> print p.pattern

    (?P<word>/b[a-z]+/b)|(?P<num>/b/d+/b)|(?P<id>/b[a-z_]+/w*/b)

    看,和我們輸入的一樣。

    接下來(lái)的p.groupindex則是一個(gè)字典,它包含了規(guī)則中的所有命名組。字典的key是名字,values是組的序號(hào)。由于字典是以名字作為key,所以一個(gè)無(wú)命名的組不會(huì)出現(xiàn)在這里。

     

     

    3.2組與Match對(duì)象

    組與Match對(duì)象是Python正則式的重點(diǎn)。只有掌握了組和Match對(duì)象的使用,才算是真正學(xué)會(huì)了Python正則式。

    3.2.1 組的名字與序號(hào)

    正則式中的每個(gè)組都有一個(gè)序號(hào),它是按定義時(shí)從左到右的順序從1開(kāi)始編號(hào)的。其實(shí),re的正則式還有一個(gè)0號(hào)組,它就是整個(gè)正則式本身。

    我們來(lái)看個(gè)例子

    >>> p=re.compile( r’(?P<name>[a-z]+)/s+(?P<age>/d+)/s+(?P<tel>/d+).*’ , re.I )

    >>> p.groupindex

    {'age': 2, 'tel': 3, 'name': 1}

    >>> s=’Tom 24 88888888  <=’

    >>> m=p.search(s)

    >>> m.groups()                           #看看匹配的各組的情況

    ('Tom', '24', '8888888')

    >>> m.group(‘name’)                   #使用組名獲取匹配的字符串

    ‘Tom’

    >>> m.group( 1 )                         #使用組序號(hào)獲取匹配的字符串,同使用組名的效果一樣

    >>> m.group(0)                           # 0組里面是什么呢?

    'Tom 24 88888888  <='

    原來(lái)0組就是整個(gè)正則式,包括沒(méi)有被包圍到組里面的內(nèi)容。當(dāng)獲取0組的時(shí)候,你可以不寫(xiě)這個(gè)參數(shù)。m.group(0)和m.group()的效果是一樣的:

    >>> m.group()

    'Tom 24 88888888  <='

     

    接下來(lái)看看更多的Match對(duì)象的方法,看看我們能做些什么。

    3.2.2 Match對(duì)象的方法

    group([index|id]) 獲取匹配的組,缺省返回組0,也就是全部值

    groups()               返回全部的組

    groupdict()           返回以組名為key,匹配的內(nèi)容為values的字典

    接上例:

    >>> m.groupindex()

    {'age': '24', 'tel': '88888888', 'name': 'Tom'}

    start( [group] )     獲取匹配的組的開(kāi)始位置

    end( [group] )              獲取匹配的組的結(jié)束位置

    span( [group] )     獲取匹配的組的(開(kāi)始,結(jié)束)位置

     

    expand( template )根據(jù)一個(gè)模版用找到的內(nèi)容替換模版里的相應(yīng)位置

    這個(gè)功能比較有趣,它根據(jù)一個(gè)模版來(lái)用匹配到的內(nèi)容替換模版中的相應(yīng)位置,組成一個(gè)新的字符串返回。它使用/g<index|name>或/index來(lái)指示一個(gè)組。

    接上例

    >>> m.expand(r'name is /g<1> , age is /g<age> , tel is /3')

    'name is Tom , age is 24 , tel is 88888888'

     

    除了以上這些函數(shù)外,Match對(duì)象還有些屬性

    pos         搜索開(kāi)始的位置參數(shù)

    endpos  搜索結(jié)束的位置參數(shù)

    這兩個(gè)是使用findall或match等函數(shù)時(shí),傳入的參數(shù)。在上面這個(gè)例子里,我們沒(méi)有指定開(kāi)始和結(jié)束位置,那么缺省的開(kāi)始位置就是0,結(jié)束位置就是最后。

    >>> m.pos

    0

    >>> m.endpos

    19

    lastindex 最后匹配的組的序號(hào)

    >>> m.lastindex

    3

    lastgroup       最后匹配的組名

    >>> m.lastgroup

    'tel'

    re    產(chǎn)生這個(gè)匹配的Pattern對(duì)象,可以認(rèn)為是個(gè)逆引用

    >>> m.re.pattern

    '(?P<name>[a-z]+)//s+(?P<age>//d+)//s+(?P<tel>//d+).*'

    得到了產(chǎn)生這個(gè)匹配的規(guī)則

    string 匹配的目標(biāo)字符串

    >>> m.string

    'Tom 24 88888888  <='

    轉(zhuǎn)自:http://hi.baidu.com/yangdaming1983/item/e6a8146255a5442169105b91
    posted @ 2013-02-11 16:28 Seraphi 閱讀(278) | 評(píng)論 (0)編輯 收藏
         摘要: 1        概述1.1     什么是捕獲組捕獲組就是把正則表達(dá)式中子表達(dá)式匹配的內(nèi)容,保存到內(nèi)存中以數(shù)字編號(hào)或顯式命名的組里,方便后面引用。當(dāng)然,這種引用既可以是在正則表達(dá)式內(nèi)部,也可以是在正則表達(dá)式外部。捕獲組有兩種形式,一種是普通捕獲組,另一種是命名捕獲組,...  閱讀全文
    posted @ 2013-02-11 16:26 Seraphi 閱讀(1952) | 評(píng)論 (0)編輯 收藏

    Python讀寫(xiě)文件

    Python讀寫(xiě)文件
    1.open
    使用open打開(kāi)文件后一定要記得調(diào)用文件對(duì)象的close()方法。比如可以用try/finally語(yǔ)句來(lái)確保最后能關(guān)閉文件。

    file_object = open('thefile.txt')
    try:
         all_the_text = file_object.read( )
    finally:
         file_object.close( )

    注:不能把open語(yǔ)句放在try塊里,因?yàn)楫?dāng)打開(kāi)文件出現(xiàn)異常時(shí),文件對(duì)象file_object無(wú)法執(zhí)行close()方法。

    2.讀文件
    讀文本文件
    input = open('data', 'r')
    #第二個(gè)參數(shù)默認(rèn)為r
    input = open('data')

     

    讀二進(jìn)制文件
    input = open('data', 'rb')
     

    讀取所有內(nèi)容
    file_object = open('thefile.txt')
    try:
         all_the_text = file_object.read( )
    finally:
         file_object.close( )
     

    讀固定字節(jié)
    file_object = open('abinfile', 'rb')
    try:
        while True:
             chunk = file_object.read(100)
            if not chunk:
                break
             do_something_with(chunk)
    finally:
         file_object.close( )
     

    讀每行
    list_of_all_the_lines = file_object.readlines( )

    如果文件是文本文件,還可以直接遍歷文件對(duì)象獲取每行:

    for line in file_object:
         process line
     

    3.寫(xiě)文件
    寫(xiě)文本文件
    output = open('data', 'w')
     

    寫(xiě)二進(jìn)制文件
    output = open('data', 'wb')
     

    追加寫(xiě)文件
    output = open('data', 'w+')
     

    寫(xiě)數(shù)據(jù)
    file_object = open('thefile.txt', 'w')
    file_object.write(all_the_text)
    file_object.close( )
     

    寫(xiě)入多行
    file_object.writelines(list_of_text_strings)

    注意,調(diào)用writelines寫(xiě)入多行在性能上會(huì)比使用write一次性寫(xiě)入要高。

    在處理日志文件的時(shí)候,常常會(huì)遇到這樣的情況:日志文件巨大,不可能一次性把整個(gè)文件讀入到內(nèi)存中進(jìn)行處理,例如需要在一臺(tái)物理內(nèi)存為 2GB 的機(jī)器上處理一個(gè) 2GB 的日志文件,我們可能希望每次只處理其中 200MB 的內(nèi)容。
    在 Python 中,內(nèi)置的 File 對(duì)象直接提供了一個(gè) readlines(sizehint) 函數(shù)來(lái)完成這樣的事情。以下面的代碼為例:

    file = open('test.log', 'r')sizehint = 209715200   # 200Mposition = 0lines = file.readlines(sizehint)while not file.tell() - position < 0:       position = file.tell()       lines = file.readlines(sizehint)

    每次調(diào)用 readlines(sizehint) 函數(shù),會(huì)返回大約 200MB 的數(shù)據(jù),而且所返回的必然都是完整的行數(shù)據(jù),大多數(shù)情況下,返回的數(shù)據(jù)的字節(jié)數(shù)會(huì)稍微比 sizehint 指定的值大一點(diǎn)(除最后一次調(diào)用 readlines(sizehint) 函數(shù)的時(shí)候)。通常情況下,Python 會(huì)自動(dòng)將用戶指定的 sizehint 的值調(diào)整成內(nèi)部緩存大小的整數(shù)倍。

    file在python是一個(gè)特殊的類型,它用于在python程序中對(duì)外部的文件進(jìn)行操作。在python中一切都是對(duì)象,file也不例外,file有file的方法和屬性。下面先來(lái)看如何創(chuàng)建一個(gè)file對(duì)象:


    file(name[, mode[, buffering]]) 
    file()函數(shù)用于創(chuàng)建一個(gè)file對(duì)象,它有一個(gè)別名叫open(),可能更形象一些,它們是內(nèi)置函數(shù)。來(lái)看看它的參數(shù)。它參數(shù)都是以字符串的形式傳遞的。name是文件的名字。
    mode是打開(kāi)的模式,可選的值為r w a U,分別代表讀(默認(rèn)) 寫(xiě) 添加支持各種換行符的模式。用w或a模式打開(kāi)文件的話,如果文件不存在,那么就自動(dòng)創(chuàng)建。此外,用w模式打開(kāi)一個(gè)已經(jīng)存在的文件時(shí),原有文件的內(nèi)容會(huì)被清空,因?yàn)橐婚_(kāi)始文件的操作的標(biāo)記是在文件的開(kāi)頭的,這時(shí)候進(jìn)行寫(xiě)操作,無(wú)疑會(huì)把原有的內(nèi)容給抹掉。由于歷史的原因,換行符在不同的系統(tǒng)中有不同模式,比如在 unix中是一個(gè)\n,而在windows中是‘\r\n’,用U模式打開(kāi)文件,就是支持所有的換行模式,也就說(shuō)‘\r’ '\n' '\r\n'都可表示換行,會(huì)有一個(gè)tuple用來(lái)存貯這個(gè)文件中用到過(guò)的換行符。不過(guò),雖說(shuō)換行有多種模式,讀到python中統(tǒng)一用\n代替。在模式字符的后面,還可以加上+ b t這兩種標(biāo)識(shí),分別表示可以對(duì)文件同時(shí)進(jìn)行讀寫(xiě)操作和用二進(jìn)制模式、文本模式(默認(rèn))打開(kāi)文件。
    buffering如果為0表示不進(jìn)行緩沖;如果為1表示進(jìn)行“行緩沖“;如果是一個(gè)大于1的數(shù)表示緩沖區(qū)的大小,應(yīng)該是以字節(jié)為單位的。

    file對(duì)象有自己的屬性和方法。先來(lái)看看file的屬性。


    closed #標(biāo)記文件是否已經(jīng)關(guān)閉,由close()改寫(xiě) 
    encoding #文件編碼 
    mode #打開(kāi)模式 
    name #文件名 
    newlines #文件中用到的換行模式,是一個(gè)tuple 
    softspace #boolean型,一般為0,據(jù)說(shuō)用于print

    file的讀寫(xiě)方法:


    F.read([size]) #size為讀取的長(zhǎng)度,以byte為單位 
    F.readline([size]) 
    #讀一行,如果定義了size,有可能返回的只是一行的一部分 
    F.readlines([size]) 
    #把文件每一行作為一個(gè)list的一個(gè)成員,并返回這個(gè)list。其實(shí)它的內(nèi)部是通過(guò)循環(huán)調(diào)用readline()來(lái)實(shí)現(xiàn)的。如果提供size參數(shù),size是表示讀取內(nèi)容的總長(zhǎng),也就是說(shuō)可能只讀到文件的一部分。 
    F.write(str) 
    #把str寫(xiě)到文件中,write()并不會(huì)在str后加上一個(gè)換行符 
    F.writelines(seq) 
    #把seq的內(nèi)容全部寫(xiě)到文件中。這個(gè)函數(shù)也只是忠實(shí)地寫(xiě)入,不會(huì)在每行后面加上任何東西。 
    file的其他方法:


    F.close() 
    #關(guān)閉文件。python會(huì)在一個(gè)文件不用后自動(dòng)關(guān)閉文件,不過(guò)這一功能沒(méi)有保證,最好還是養(yǎng)成自己關(guān)閉的習(xí)慣。如果一個(gè)文件在關(guān)閉后還對(duì)其進(jìn)行操作會(huì)產(chǎn)生ValueError 
    F.flush() 
    #把緩沖區(qū)的內(nèi)容寫(xiě)入硬盤(pán) 
    F.fileno() 
    #返回一個(gè)長(zhǎng)整型的”文件標(biāo)簽“ 
    F.isatty() 
    #文件是否是一個(gè)終端設(shè)備文件(unix系統(tǒng)中的) 
    F.tell() 
    #返回文件操作標(biāo)記的當(dāng)前位置,以文件的開(kāi)頭為原點(diǎn) 
    F.next() 
    #返回下一行,并將文件操作標(biāo)記位移到下一行。把一個(gè)file用于for ... in file這樣的語(yǔ)句時(shí),就是調(diào)用next()函數(shù)來(lái)實(shí)現(xiàn)遍歷的。 
    F.seek(offset[,whence]) 
    #將文件打操作標(biāo)記移到offset的位置。這個(gè)offset一般是相對(duì)于文件的開(kāi)頭來(lái)計(jì)算的,一般為正數(shù)。但如果提供了whence參數(shù)就不一定了,whence可以為0表示從頭開(kāi)始計(jì)算,1表示以當(dāng)前位置為原點(diǎn)計(jì)算。2表示以文件末尾為原點(diǎn)進(jìn)行計(jì)算。需要注意,如果文件以a或a+的模式打開(kāi),每次進(jìn)行寫(xiě)操作時(shí),文件操作標(biāo)記會(huì)自動(dòng)返回到文件末尾。 
    F.truncate([size]) 
    #把文件裁成規(guī)定的大小,默認(rèn)的是裁到當(dāng)前文件操作標(biāo)記的位置。如果size比文件的大小還要大,依據(jù)系統(tǒng)的不同可能是不改變文件,也可能是用0把文件補(bǔ)到相應(yīng)的大小,也可能是以一些隨機(jī)的內(nèi)容加上去。


    本文來(lái)自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/adupt/archive/2009/08/11/4435615.aspx

    posted @ 2013-02-10 23:31 Seraphi 閱讀(1312) | 評(píng)論 (0)編輯 收藏
    posted @ 2013-02-02 16:01 Seraphi 閱讀(361) | 評(píng)論 (0)編輯 收藏

    linux 下的iconv命令可以把Windows默認(rèn)GBK編碼的文件轉(zhuǎn)成Linux下用的UTF-8編碼。

     Example: $ iconv -f GBK -t UTF-8 file_name -o file_name



             1. 安裝命令行版的texlive: sudo apt-get install texlive-full

              2. 安裝一個(gè)比較有幫助性的編輯器: sudo apt-get install texmaker

              3. 安裝中文環(huán)境: sudo apt-get install latex-cjk-all

      

             A useful webiste http://chixi.an.blog.163.com/blog/static/29359272201262952120729/


        To install/upgrade to TeX Live 2012:

    1. Open a terminal with Ctrl+Alt+T
    2. Add the texlive-backports PPA by typing the below (enter your password when prompted):

      sudo apt-add-repository ppa:texlive-backports/ppa 
    3. Then type:

      sudo apt-get update 
    4. Installation:

      • If you are installing TeX Live for the first time, type:

        sudo apt-get install texlive 
      • If you already have TeX Live installed and are upgrading, type:

        sudo apt-get upgrade 

        Warning: this will also upgrade all other packages on your Ubuntu system for which upgrades are available. If you do not wish to do this, please use the previous sudo apt-get install texliveinstead.

        轉(zhuǎn)自:
        http://blog.csdn.net/lsg32/article/details/8058491

    posted @ 2013-02-02 15:27 Seraphi 閱讀(286) | 評(píng)論 (0)編輯 收藏
    在新版本的UBUNTU里不支持WINDOWS的wubi安裝,要用如下方式:
    Ubuntu 12.04 wubi的安裝
     
    一、在12.04里,在Windows內(nèi)安裝那個(gè)選項(xiàng)被禁用了,只能通過(guò)以下指令開(kāi)啟,X為光驅(qū)盤(pán)符:
    代碼:
    X:\wubi.exe --force-wubi
    posted @ 2013-02-01 12:27 Seraphi 閱讀(257) | 評(píng)論 (0)編輯 收藏
    1、學(xué)會(huì)latex
    2、熟練python
    3、NLP相關(guān)知識(shí),主要是gibbs sampling;以及這學(xué)期所學(xué)到的東西
    4、Deep learning
    5、改論文
    6、加強(qiáng)算法方面的練習(xí)
    posted @ 2013-01-17 00:24 Seraphi 閱讀(189) | 評(píng)論 (0)編輯 收藏
    【招聘須知】  Facebook正在全球招聘,對(duì)中國(guó)頂尖大學(xué)的Engineering專業(yè)學(xué)生尤其歡迎。  具體職位信息可以在https://www.facebook.com/careers上找到,申請(qǐng)的時(shí)候一般都是選 擇Software Engineer (University Recruiting),F(xiàn)acebook的制度是并不預(yù)先定向你去 哪個(gè)組。在入職的第一個(gè)月統(tǒng)一進(jìn)行培訓(xùn),培訓(xùn)結(jié)束的兩周后進(jìn)行統(tǒng)一的Team Selectio n,每個(gè)組的大Manager過(guò)來(lái)將自己的組做的東西,你可以和感興趣的組聊,雙向選擇后最 終決定去哪里。所以是很自由的文化,決定你去哪里的最重要的是Potential,而不是你 已經(jīng)在這個(gè)area的experience,這也是FB的文化,希望培養(yǎng)每個(gè)Engineer成為多面手,對(duì) 任何問(wèn)題的Fast learner。   【基本要求】  專業(yè)不限要求有限,可以分成兩個(gè)類,看看你符合哪一類  1. 第一類:  - ACM/ICPC 區(qū)域銀牌以上,或者在大型比賽上得過(guò)不錯(cuò)的名次(前15%),這里大型比賽 指包括NOIP, NOI, APOI,省級(jí)選拔賽,Topcoder, Google Code Jam, 百度之星,有道難 題等等 - 在以下公司有過(guò)實(shí)習(xí)經(jīng)驗(yàn):Google, Microsoft Research Asia, Hulu, EMC/VMware,  Microstrategy (這些公司只是在經(jīng)驗(yàn)范圍內(nèi)實(shí)習(xí)生非常靠譜,并沒(méi)有對(duì)其他公司不尊重 的意思,只是接觸的不多而已,見(jiàn)諒) - 本科成績(jī)年級(jí)前10%,核心課程算法,數(shù)據(jù)結(jié)構(gòu),C++,離散,組合數(shù)學(xué)等等絕大部分為 優(yōu)秀 - 頂級(jí)會(huì)議上發(fā)表一二作論文,頂級(jí)會(huì)議的定義是專業(yè)領(lǐng)域內(nèi)公認(rèn)的大會(huì),例如IR/ML領(lǐng) 域的SIGIR, ICML, WWW, ICDM等等  以上符合任意一條的話,請(qǐng)聯(lián)系我  2. 第二類:  - <Crack the Coding Interview> 從頭到尾詳細(xì)閱讀并且做完所有的例題和習(xí)題 - www.leetcode.com 全部做完所有的題   符合以上所有條件的,請(qǐng)聯(lián)系我,附上代碼   PS: CTCI書(shū)課后有答案,leetcode網(wǎng)上有不錯(cuò)的人做了發(fā)表,比如 https://github.com/zwxxx/LeetCode https://github.com/anson627/leetcode  做的時(shí)候請(qǐng)不要參考,做完以后可以和參考答案對(duì)比改進(jìn),直接抄答案是沒(méi)有意義的,答 案只是幫你提高的工具。對(duì)于代碼的要求是,寫(xiě)的塊,風(fēng)格簡(jiǎn)潔,易于理解     【聯(lián)系方式】  請(qǐng)發(fā)郵件到郵箱zhangchitc@gmail.com,附上簡(jiǎn)單的自我介紹,并著名是符合上述哪些要 求,如果第二類請(qǐng)用zip壓縮包打包代碼附在附件中  BTW: 第一類滿足的話最終還是要將第二類里面的材料全部做了的。。。。     【面試過(guò)程】   職位都是美國(guó)總部,不排除可能外派海外Site,不過(guò)基本應(yīng)該都是前者。在推薦以后一 周之內(nèi)應(yīng)該總部會(huì)安排工程師使用skype進(jìn)行2到3輪電話面試,通過(guò)以后提供機(jī)票到美國(guó) 進(jìn)行onsite面試。3到5輪不等。基本都是算法面試,在白板上寫(xiě)程序。全程英文,不需要 英語(yǔ)標(biāo)準(zhǔn)考試成績(jī),但是對(duì)基本的聽(tīng)力和口語(yǔ)要求比較高,要能自由和工程師進(jìn)行交流, 語(yǔ)法有問(wèn)題的可以完全不用擔(dān)心  住宿和交通費(fèi)用全包。     【注意事項(xiàng)】  - 理論上是可以推實(shí)習(xí)的,不過(guò)對(duì)中國(guó)學(xué)生來(lái)講實(shí)習(xí)不是很現(xiàn)實(shí),本科生太忙,研究生完 全2、3個(gè)月在外面導(dǎo)師應(yīng)該說(shuō)不過(guò)去 - 基本沒(méi)有deadline,全年都可以聯(lián)系我,但是考慮到大陸學(xué)生過(guò)去的H1B簽證申請(qǐng),如 果拿到offer需要在每年4月前遞交申請(qǐng),所以最晚開(kāi)始面試應(yīng)該是2月,越快申請(qǐng)?jiān)胶?- 因?yàn)镕B在中國(guó)沒(méi)有公開(kāi)的招聘渠道,所以請(qǐng)不要傳播本帖(雖然知道基本是白說(shuō),但是 希望至少本校的同學(xué)不要傳播出去)招聘的細(xì)節(jié)我不能說(shuō)太多,接觸以后可以聊 - 滿足條件就請(qǐng)大膽申請(qǐng),在整個(gè)過(guò)程中我都可以為大家提供幫助和建議。根據(jù)HR的反饋 來(lái)看本人的推薦還是挺靠譜的,目前為止有7位同學(xué)通過(guò)我的推薦成功拿到了offer,目測(cè) 很快在一周之內(nèi)會(huì)達(dá)到10個(gè)
    posted @ 2013-01-11 00:24 Seraphi 閱讀(2280) | 評(píng)論 (2)編輯 收藏
    Windows Registry Editor Version 5.00
    [HKEY_CLASSES_ROOT\CLSID\{B416D21B-3B22-B6D4-BBD3-BBD452DB3D5B}]
    @="Internet Explorer"
    "InfoTip"="@C:\\WINDOWS\\system32\\zh-CN\\ieframe.dll.mui,-881"
    "LocalizedString"="@C:\\WINDOWS\\system32\\zh-CN\\ieframe.dll.mui,-880"
    [HKEY_CLASSES_ROOT\CLSID\{B416D21B-3B22-B6D4-BBD3-BBD452DB3D5B}\DefaultIcon]
    @="C:\\Program Files\\Internet Explorer\\iexplore.exe,-32528"
    [HKEY_CLASSES_ROOT\CLSID\{B416D21B-3B22-B6D4-BBD3-BBD452DB3D5B}\Shell\NoAddOns]
    @="在沒(méi)有加載項(xiàng)的情況下啟動(dòng)"
    [HKEY_CLASSES_ROOT\CLSID\{B416D21B-3B22-B6D4-BBD3-BBD452DB3D5B}\Shell\NoAddOns\Command]
    @="C:\\Program Files\\Internet Explorer\\iexplore.exe about:NoAdd-ons"
    [HKEY_CLASSES_ROOT\CLSID\{B416D21B-3B22-B6D4-BBD3-BBD452DB3D5B}\Shell\Open]
    @="打開(kāi)(O)"
    [HKEY_CLASSES_ROOT\CLSID\{B416D21B-3B22-B6D4-BBD3-BBD452DB3D5B}\Shell\Open\Command]
    @="C:\\Program Files\\Internet Explorer\\iexplore.exe"
    [HKEY_CLASSES_ROOT\CLSID\{B416D21B-3B22-B6D4-BBD3-BBD452DB3D5B}\Shell\屬性(R)]
    @=""
    [HKEY_CLASSES_ROOT\CLSID\{B416D21B-3B22-B6D4-BBD3-BBD452DB3D5B}\Shell\屬性(R)\Command]
    @="Rundll32.exe Shell32.dll,Control_RunDLL Inetcpl.cpl"
    [HKEY_CLASSES_ROOT\CLSID\{B416D21B-3B22-B6D4-BBD3-BBD452DB3D5B}\ShellFolder]
    @=""
    "Attributes"=dword:00000010
    "HideFolderVerbs"=""
    "WantsParseDisplayName"=""
    "HideOnDesktopPerUser"=""
    @="C:\\WINDOWS\\system32\\ieframe.dll,-190"
    "HideAsDeletePerUser"=""
    Windows Registry Editor Version 5.00
    [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\CLSID\{B416D21B-3B22-B6D4-BBD3-BBD452DB3D5B}]
    @="Internet Explorer"
    Windows Registry Editor Version 5.00
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace\{B416D21B-3B22-B6D4-BBD3-BBD452DB3D5B}]
    @="Windows Media"
    posted @ 2013-01-06 15:13 Seraphi 閱讀(179) | 評(píng)論 (0)編輯 收藏
    set tags=tags;
    set backspace=indent,eol,start
    set shiftwidth=4 
    set tabstop=4
    set expandtab
    set encoding=utf8
    set fileencodings=utf8,gbk
    set nocompatible "去掉討厭的有關(guān)vim一致性模式,避免以前版本的一些bug和局限.
    set number "顯示行號(hào).
    set background=dark "背景顏色暗色.(我覺(jué)得不錯(cuò),保護(hù)眼睛.)
    syntax on "語(yǔ)法高亮顯示.(這個(gè)肯定是要的.)
    set history=50 "設(shè)置命令歷史記錄為50條.
    set autoindent "使用自動(dòng)對(duì)起,也就是把當(dāng)前行的對(duì)起格式應(yīng)用到下一行.
    set smartindent "依據(jù)上面的對(duì)起格式,智能的選擇對(duì)起方式,對(duì)于類似C語(yǔ)言編.
    set tabstop=4 "設(shè)置tab鍵為4個(gè)空格.
    set shiftwidth=4 "設(shè)置當(dāng)行之間交錯(cuò)時(shí)使用4個(gè)空格
    set showmatch "設(shè)置匹配模式,類似當(dāng)輸入一個(gè)左括號(hào)時(shí)會(huì)匹配相應(yīng)的那個(gè)右括號(hào)
    set incsearch "搜索選項(xiàng).(比如,鍵入"/bo",光標(biāo)自動(dòng)找到第一個(gè)"bo"所在的位置.)
    hi Comment ctermfg=darkmagenta
    hi String ctermfg=darkred
    hi Number ctermfg=darkblue
    "是否生成一個(gè)備份文件.(備份的文件名為原文件名加“~“后綴
    "(我不喜歡這個(gè)備份設(shè)置,一般注釋掉.)
    "if has(“vms.
    " set nobackup
    "else
    " set backup
    "endif


    關(guān)于注釋字體顏色的修改,可以參考:http://blog.csdn.net/a670449625/article/details/48051249
    posted @ 2012-11-09 19:44 Seraphi 閱讀(193) | 評(píng)論 (0)編輯 收藏
    主站蜘蛛池模板: 亚洲人成毛片线播放| 国产精品久久久亚洲| 亚洲成人免费网站| 伊人久久免费视频| 亚洲国产成人精品无码区在线观看 | 久久亚洲AV无码精品色午夜| 国产无遮挡裸体免费视频在线观看 | 一区二区三区免费电影| 国产国拍亚洲精品福利| 久久高潮一级毛片免费| 亚洲乱码一区二区三区在线观看| 一个人看的免费观看日本视频www| 亚洲无码黄色网址| 最近免费中文字幕MV在线视频3| 久久精品亚洲中文字幕无码网站| 久久永久免费人妻精品| 亚洲中文久久精品无码1| 欧美a级成人网站免费| 亚洲成a∨人片在无码2023| 亚洲va中文字幕无码| a级毛片黄免费a级毛片| 亚洲精品无码不卡| 久久精品免费一区二区喷潮| 亚洲AV日韩AV永久无码色欲 | 久草免费福利视频| 亚洲宅男天堂a在线| 麻豆成人精品国产免费| 一级成人生活片免费看| 亚洲伊人久久大香线蕉苏妲己| 国产一卡2卡3卡4卡2021免费观看| 亚洲精品无播放器在线播放| 亚洲日韩在线观看免费视频| 97国产在线公开免费观看| 亚洲综合激情五月色一区| 成人伊人亚洲人综合网站222| 国产午夜精品免费一区二区三区| 亚洲av成人一区二区三区| 亚洲成人国产精品| 免费在线视频你懂的| 日本一区二区三区免费高清在线| 亚洲AV无码国产精品色午友在线|