1
2
3
4
5
6
7
8
9
10
<code>>>>aa</code><code>=</code><code>"hi"</code>
<code>>>>num</code><code>=</code><code>[</code><code>0</code><code>,</code><code>1</code><code>,</code><code>2</code><code>,</code><code>3</code><code>,</code><code>4</code><code>,</code><code>5</code><code>]</code>
<code>>>></code><code>for</code> <code>i </code><code>in</code> <code>num :</code>
<code> </code><code>if</code> <code>i ></code><code>0</code><code>:</code>
<code> </code><code>print</code><code>(aa)</code>
<code>hi</code>
上面這個就是實作“把某個字元串,反複出現某list裡滿足條件的元素次數”,這個得到的結果是一個str,如果要簡化一下這段代碼如下:
<code>>>>[aa </code><code>for</code> <code>i </code><code>in</code> <code>num </code><code>if</code> <code>i ></code><code>0</code><code>]</code>
<code>[hi,hi,hi,hi,hi]</code>
這裡一定要有中括号,不然的話算SyntaxError: invalid syntax。得到的結果是一個list。
replace函數
一般情況下來說,對于字元串的替換,常用的都是.replace函數。replace()可以設定替換次數。
<code>>>> aaa</code><code>=</code><code>"wade,james,kobe,lewis,kevin"</code>
<code>>>> s</code><code>=</code><code>aaa.replace(</code><code>"james"</code><code>,</code><code>"curry"</code><code>)</code>
<code>'wade,curry,kobe,lewis,kevin'</code>
<code>>>></code><code>type</code><code>(s)</code>
<code><</code><code>class</code> <code>'str'</code><code>></code>
<code>>>> champions</code><code>=</code><code>'warriors,spurs,heat,heat,mavericks,lakers,lakers,celtics,spurs'</code>
<code>>>> champions.replace(</code><code>"spurs"</code><code>,</code><code>"馬刺隊"</code><code>,</code><code>1</code><code>) </code><code>#隻替換一次</code>
<code>'warriors,馬刺隊,heat,heat,mavericks,lakers,lakers,celtics,spurs'</code>
<code>>>> champions.replace(</code><code>"spurs"</code><code>,</code><code>"馬刺隊"</code><code>,</code><code>2</code><code>) </code><code>#替換兩次</code>
<code>'warriors,馬刺隊,heat,heat,mavericks,lakers,lakers,celtics,馬刺隊'</code>
rm.sub子產品
sub子產品主要是字元串的針對性替換作用,在這一點上sub()和replace()的功能類似的,但是sub()支援正規表達式。使用格式是text.sub(r"要替換的内容","替換成的内容",替換範圍),舉個例子:
<code>>>></code><code>import</code> <code>re</code>
<code>>>>s0</code><code>=</code><code>"james and wade"</code>
<code>>>>s1</code><code>=</code><code>re.sub(r</code><code>"james"</code><code>,</code><code>"bosh"</code><code>,s0) </code><code>#r指的是原生字元串的意思</code>
<code>>>></code><code>print</code><code>(s1)</code>
<code>bosh </code><code>and</code> <code>wade</code>
sub子產品支援 | 的引用,比如把上面代碼修改一下:
<code>>>>s2</code><code>=</code><code>re.sub(r</code><code>"james|wade"</code><code>,</code><code>"bosh"</code><code>,s0) </code><code># | 就是或的意思</code>
<code>>>></code><code>print</code><code>(s2)</code>
<code>bosh </code><code>and</code> <code>bosh</code>
但是要注意,如果類似于linux裡的或,用[]括起來的話,結果可大不相同:
<code>>>>s3</code><code>=</code><code>re.sub(r</code><code>"[james|kobe]"</code><code>,</code><code>"bosh"</code><code>,s0) </code><code># 這裡原來打算把james或者kobe替換成bosh</code>
<code>>>></code><code>print</code><code>(s3)</code>
<code>boshboshboshboshbosh boshnd wboshdbosh </code>
<code>#可以看出隻要是 j a m e s k o b e這幾個字母就都變成了bosh,而出現了boshnd,是應為n和d 不屬于上面幾個字母,是以nd保留了下來。</code>
如果要把每一項都改,可以用[a-z],
<code>>>>s4</code><code>=</code><code>re.sub(r</code><code>"[a-z]"</code><code>,</code><code>"bosh"</code><code>,s0)</code>
<code>>>></code><code>print</code><code>(s4)</code>
<code>boshboshboshboshbosh boshboshbosh boshboshboshbosh</code>
那麼對于數字而言,就是[1-9],但是有沒有一種方式,把所有的元素都包括了呢?有的,那就是\w
<code>>>>s0</code><code>=</code><code>"james23 and wade3"</code> <code>#這是一個混雜型的字元串,裡面有數字、字母</code>
<code>>>>s5</code><code>=</code><code>re.sub(r</code><code>"\w"</code><code>,</code><code>"bosh"</code><code>,s0)</code>
<code>>>></code><code>print</code><code>(s5)</code>
\w對于“@#¥%^$”特殊符号是不好使的。
re還有一個subn的子產品,再看看這個。
<code>>>> </code><code>import</code> <code>re</code>
<code>>>> s</code><code>=</code><code>"1abc23def45"</code>
<code>>>> </code><code>print</code><code>(</code><code>str</code><code>(re.subn(r</code><code>"\w"</code><code>,</code><code>"hi"</code><code>,s)[</code><code>1</code><code>]))</code>
<code>11</code> <code>#這個是展現了一共替換了多少次,</code>
<code>>>> </code><code>print</code><code>(</code><code>str</code><code>(re.subn(r</code><code>"\w"</code><code>,</code><code>"hi"</code><code>,s)[</code><code>0</code><code>]))</code>
<code>hihihihihihihihihihihi </code><code>#隻有[0]和[1],[0]是替換的内容。</code>
<code>>>> </code><code>print</code><code>(</code><code>str</code><code>(re.subn(r</code><code>"\w"</code><code>,</code><code>"hi"</code><code>,s)))</code>
<code>(</code><code>'hihihihihihihihihihihi'</code><code>, </code><code>11</code><code>)</code>
<code>>>> </code><code>print</code><code>(</code><code>str</code><code>(re.subn(r</code><code>"[a-z]"</code><code>,</code><code>"hi"</code><code>,s)))</code>
<code>(</code><code>'1hihihi23hihihi45'</code><code>, </code><code>6</code><code>)</code>
對于字元串的基本操作:http://blog.csdn.net/minsenwu/article/details/7891453
本文轉自 蘇幕遮618 51CTO部落格,原文連結:http://blog.51cto.com/chenx1242/1767268