詳解Python3中字串中的數字提取方法

2022-10-04 21:30:31 字數 1581 閱讀 6946

逛到乙個有意思的部落格在裡面看到一篇關於valueerror: invalid literal for int() with base 10錯誤的解析,針對這個錯誤,博主已經給出解決辦法,使用的是re.sub 方法

totalcount = '100abc'

totalcount = re.sub("\d", "", totalcount)

但是沒有說明什麼含義,於是去查了其他的資料,做一下記錄:

在python3.5.2 官方文件re模組中sub函式的定義是: 

re.sub(pattern, repl, string,www.cppcns.com count=0, flags=0)

在字串 string 中找到匹配正規表示式 pattern 的所有子串,用另乙個字串 repl 進行替換。如果沒有找到匹配 pattern 的串,則返回未被修改的 string。repl 既可以是字串也可以是乙個函式。

由此可分析上面使用的語句的含義:在'100abc'這個字串中找到非數字的字元(正規表示式中'\d'表示非數字),並用""替換,然後返回的就是只剩下數字的字串。 

>>> totalcount = '100abc'

>>> totalcount = re.sub("\d", "", totalcount)

>>> print(totalcount)

100>>> type(totalcount)

好吧,以上說明完畢,不過其實我想到的是我爬取知乎所關注的問答時,所遇到的類似的問題:

answer_num_get = soup.find('h3', ) # 答案數量:32 個回答

if answer_num_get is not none:

answer_nu程式設計客棧m = int(answer_num_get.split()[0])

n = answer_num // 10

其中第三行之所以能用int(),是因為string.split()[0]將answer_num_get的值「32 個回答」提取出數字(注:32後面有乙個空格,在這裡非常重要,因為知乎上抓取回來的這個元素就是)

split()的定義    str.split(sep=none, maxsplit=-1)

>>> import string

>>> a = "32 個答案"

>>> b = a.split()[0]

>>> print(b)

32>>> type(b)

>>> c = '1,2,3'

>>> c.split(',')

['1', '2', '3']

>>> c.sp程式設計客棧lit(',')[0]

'1'>>> c.split(',')[1]

'2'>>>

由此可看出split()的第乙個引數是分隔符,如果什麼都不填就是預設是以空格來分隔。

第一種方法需要用到正規表示式,第二種方法則需要有分隔符(我猜是不是這個原因,在原網頁上總答案數www.cppcns.com的數字後有個空www.cppcns.com格存在)。  這兩種方法都有點侷限性,不知道是否有更好的方法來分離字串中的數字。

本文標題: 詳解python3中字串中的數字提取方法

本文位址:

Python3中的字串

字串一旦建立不可更改 在字串當中每個字元都是有對應的位置的 位置一般叫做下表或者索引 小標從左到右從零開始一次遞增 在程式中根據下標線對應的資料,下表是寫在中的 建立字串 a hellow word 訪問字串種的某乙個字元 print a 7 字串的運算 加法運算時拼接操作 字串只能和整數相乘,乘幾...

python3中字串問題

在python3中,bytes string和unicodestring是兩種不同的型別。由於python3中,字串str在記憶體中是以unicode表示,乙個字元對應多個位元組。如果在網上傳輸,就需要將str轉化為以位元組為單位的bytes。例如,在做套接字試驗時,客戶端與服務端經行資料傳輸時,不...

python3中bytes hex和字串相互轉換

1 字串轉bytes a abcd a1 bytes a,encoding utf 8 2 bytes轉字串 a b abcd a1 bytes.decode a encoding utf 8 3 16進製制字串轉bytes a 01 02 03 04 05 06 a1 a.replace a2 b...