天天看點

python裡實作字元串替換

1

2

3

4

5

6

7

8

9

10

<code>&gt;&gt;&gt;aa</code><code>=</code><code>"hi"</code>

<code>&gt;&gt;&gt;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>&gt;&gt;&gt;</code><code>for</code> <code>i </code><code>in</code> <code>num :</code>

<code>            </code><code>if</code> <code>i &gt;</code><code>0</code><code>:</code>

<code>                </code><code>print</code><code>(aa)</code>

<code>hi</code>

上面這個就是實作“把某個字元串,反複出現某list裡滿足條件的元素次數”,這個得到的結果是一個str,如果要簡化一下這段代碼如下:

<code>&gt;&gt;&gt;[aa </code><code>for</code> <code>i </code><code>in</code> <code>num </code><code>if</code> <code>i &gt;</code><code>0</code><code>]</code>

<code>[hi,hi,hi,hi,hi]</code>

這裡一定要有中括号,不然的話算SyntaxError: invalid syntax。得到的結果是一個list。

replace函數

一般情況下來說,對于字元串的替換,常用的都是.replace函數。replace()可以設定替換次數。

<code>&gt;&gt;&gt; aaa</code><code>=</code><code>"wade,james,kobe,lewis,kevin"</code>

<code>&gt;&gt;&gt; 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>&gt;&gt;&gt;</code><code>type</code><code>(s)</code>

<code>&lt;</code><code>class</code> <code>'str'</code><code>&gt;</code>

<code>&gt;&gt;&gt; champions</code><code>=</code><code>'warriors,spurs,heat,heat,mavericks,lakers,lakers,celtics,spurs'</code>

<code>&gt;&gt;&gt; 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>&gt;&gt;&gt; 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>&gt;&gt;&gt;</code><code>import</code> <code>re</code>

<code>&gt;&gt;&gt;s0</code><code>=</code><code>"james and wade"</code>

<code>&gt;&gt;&gt;s1</code><code>=</code><code>re.sub(r</code><code>"james"</code><code>,</code><code>"bosh"</code><code>,s0)        </code><code>#r指的是原生字元串的意思</code>

<code>&gt;&gt;&gt;</code><code>print</code><code>(s1)</code>

<code>bosh </code><code>and</code> <code>wade</code>

sub子產品支援 | 的引用,比如把上面代碼修改一下:

<code>&gt;&gt;&gt;s2</code><code>=</code><code>re.sub(r</code><code>"james|wade"</code><code>,</code><code>"bosh"</code><code>,s0)    </code><code># | 就是或的意思</code>

<code>&gt;&gt;&gt;</code><code>print</code><code>(s2)</code>

<code>bosh </code><code>and</code> <code>bosh</code>

但是要注意,如果類似于linux裡的或,用[]括起來的話,結果可大不相同:

<code>&gt;&gt;&gt;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>&gt;&gt;&gt;</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>&gt;&gt;&gt;s4</code><code>=</code><code>re.sub(r</code><code>"[a-z]"</code><code>,</code><code>"bosh"</code><code>,s0)</code>

<code>&gt;&gt;&gt;</code><code>print</code><code>(s4)</code>

<code>boshboshboshboshbosh boshboshbosh boshboshboshbosh</code>

那麼對于數字而言,就是[1-9],但是有沒有一種方式,把所有的元素都包括了呢?有的,那就是\w

<code>&gt;&gt;&gt;s0</code><code>=</code><code>"james23 and wade3"</code>    <code>#這是一個混雜型的字元串,裡面有數字、字母</code>

<code>&gt;&gt;&gt;s5</code><code>=</code><code>re.sub(r</code><code>"\w"</code><code>,</code><code>"bosh"</code><code>,s0)</code>

<code>&gt;&gt;&gt;</code><code>print</code><code>(s5)</code>

\w對于“@#¥%^$”特殊符号是不好使的。

re還有一個subn的子產品,再看看這個。

<code>&gt;&gt;&gt; </code><code>import</code> <code>re</code>

<code>&gt;&gt;&gt; s</code><code>=</code><code>"1abc23def45"</code>

<code>&gt;&gt;&gt; </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>&gt;&gt;&gt; </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>&gt;&gt;&gt; </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>&gt;&gt;&gt; </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