[轉] 強大的python字符串解析


1.python字符串通常有單引號('...')、雙引號("...")、三引號("""...""")或('''...''')包圍,三引 號包含的字符串可由多行組成,一般可表示大段的敘述性字符串。在使用時基本沒有差別,但雙引號和三引號("""...""")中可以包含單引號,三引號 ('''...''')可以包含雙引號,而不需要轉義。
 
2.用(\)對特殊字符轉義,如(\)、(')、(")。
 
3.常用字符串內置函數
  1)str.count()  //返回該字符串中某個子串出現的次數
  2)str.find()   //返回某個子串出現在該字符串的起始位置
  3)str.lower()  //將該字符串全部轉化為小寫
  4)str.upper()  //轉為大寫
  5)str. split()  //分割字符串,返回字串串列表,默認以空格分割
  6)len(str)     //返回字符串長度
  7)int(str)     //轉成整型
  8)float(str)     //轉成浮點型
 
  例如:
  >>> str = 'Hello, world'
  >>> str.count('o')
  >>> 2
  >>> str.find('lo')
  >>> 3
  >>> str.lower()
  >>> 'hello, world'
  >>> str.upper()
  >>> 'HELLO, WORLD'
  >>> str. split()
  >>> ['Hello,', 'world']
  >>> str. split(',')
  >>> ['Hello', ' world']
  >>> len(str)
  >>> 13
  >>> str
  >>> 'Hello, world'
  >>> a = "545.2222"
 >>> float(a)
545.22220000000004
 >>> int(float(a))
545
  以上所有操作都不會改變字符串本身!
 
4.正則表達式,re模塊
  import re
  常用函數:
  1)compile():   //將正則表達式字符串編譯成正則re對象
  2)search()     //在目標字符串中匹配正則表達式
  3)match()      //從目標字符串第一個字符開始匹配正則表達
  search和match匹配成功返回 MatchObject對象,失敗返回None
 >>> p = re.compile('abc')
 >>> p.search('zabcy')
 <_sre.SRE_Match object at 0x2a95659030>
 不先編譯成正則re對象也是可以的,上例也可以為:
 >>> re.search('abc','xabcy')
 <_sre.SRE_Match object at 0x2a95659098>
 
 compile還可加些標志位,例如:re.I(re.IGNORECASE)忽略大小寫
 >>> p = re.compile('abc')
 >>> print p.search('xAbCy')
 None
 >>> p = re.compile('abc',re.I)
 >>> print p.search('xAbCy')
 <_sre.SRE_Match object at 0x2a9565a098>
 
 
 search和match區別見下例:
 >>> p = re.compile('abc')
 >>> print p.search('xxxabcyyy')
<_sre.SRE_Match object at 0x2a95659030>
 >>> print p.match('xxxabcyyy')
 None
 >>> print p.match('abcyyy')
 <_sre.SRE_Match object at 0x2a95659098>
 
 
  4) split()      //類似字符串內置函數split()
   區別在於:內置 split()以確定字符串分割,而正則split函數以正則表達式分割字

例如:以空格(1個或者多個空格)分割:

 >>> p.split('a b   c  d')
['a', 'b', 'c', 'd']

而內置split分割的結果為:

 >>> 'a b   c  d'.split(' ')
['a', 'b', '', '', 'c', '', 'd']

 
  5)findall()     //返回目標字符串中匹配正則表達式中所有子串列表

 >>> p = re.compile('^([a-z]{2}):([1-9]{3}):(.+)$')
>>> p.findall('as:123:a12')
[('as', '123', 'a12')]

 上例中正則表達式的子串為3個用括弧括起的,分別為:'[a-z]{2}'、'[1-9]{3}'、'.+', 分別被as、123、a12匹配,注意此返回的是匹配字符串元組的一維列表。

  以上比較常用的正則函數,更多用法請參照python手冊。
 
5.字符串與數字相互轉換,string模塊
  import string
  string.atoi(str[,base])  //base為可選參數,表示將字符轉換成的進制類型
  數字轉換成字符串可簡單了,直接用str()
 
6.字符與ASCII轉換
  char->ascii  ord()
  ascii->char  chr()
 

在許多編程語言中都包含有格式化字符串的功能,比如C和Fortran語言中的格式化輸入輸出。Python中內置有對字符串進行格式化的操作%。

 

模板

格式化字符串時,Python使用一個字符串作為模板。模板中有格式符,這些格式符為真實值預留位置,並說明真實數值應該呈現的格式。Python用一個tuple將多個值傳遞給模板,每個值對應一個格式符。

比如下面的例子:

print("I'm %s. I'm %d year old" % ('Vamei', 99))

上面的例子中,

"I'm %s. I'm %d year old" 為我們的模板。%s為第一個格式符,表示一個字符串。%d為第二個格式符,表示一個整數。('Vamei', 99)的兩個元素'Vamei'和99為替換%s和%d的真實值。
在模板和tuple之間,有一個%號分隔,它代表了格式化操作。

整個"I'm %s. I'm %d year old" % ('Vamei', 99) 實際上構成一個字符串表達式。我們可以像一個正常的字符串那樣,將它賦值給某個變量。比如:

a = "I'm %s. I'm %d year old" % ('Vamei', 99) print(a)

 

我們還可以用詞典來傳遞真實值。如下:

print("I'm %(name)s. I'm %(age)d year old" % {'name':'Vamei', 'age':99})

可以看到,我們對兩個格式符進行了命名。命名使用()括起來。每個命名對應詞典的一個key。

 

格式符

格式符為真實值預留位置,並控制顯示的格式。格式符可以包含有一個類型碼,用以控制顯示的類型,如下:

%s    字符串 (采用str()的顯示)

%r    字符串 (采用repr()的顯示)

%c    單個字符

%b    二進制整數

%d    十進制整數

%i    十進制整數

%o    八進制整數

%x    十六進制整數

%e    指數 (基底寫為e)

%E    指數 (基底寫為E)

%f    浮點數

%F    浮點數,與上相同

%g    指數(e)或浮點數 (根據顯示長度)

%G    指數(E)或浮點數 (根據顯示長度)

 

%%    字符"%"

 

可以用如下的方式,對格式進行進一步的控制:

%[(name)][flags][width].[precision]typecode

(name)為命名

flags可以有+,-,' '或0。+表示右對齊。-表示左對齊。' '為一個空格,表示在正數的左側填充一個空格,從而與負數對齊。0表示使用0填充。

width表示顯示寬度

precision表示小數點后精度

 

比如:

print("%+10x" % 10) print("%04d" % 5) print("%6.3f" % 2.3)

 

上面的width, precision為兩個整數。我們可以利用*,來動態代入這兩個量。比如:

print("%.*f" % (4, 1.2))

Python實際上用4來替換*。所以實際的模板為"%.4f"。

 

總結

Python中內置的%操作符可用於格式化字符串操作,控制字符串的呈現格式。Python中還有其他的格式化字符串的方式,但%操作符的使用是最方便的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM