如何去掉字串中不需要的字元

2021-08-05 23:18:47 字數 1890 閱讀 3353

實際案例

過濾掉使用者輸入中前後多餘的空白字元:」  hello  」

過濾某windows系統下某編輯檔案應用在編輯文字時插入的」\r」

解決方案:

- 方法一:字串strip(),lstrip()和rstrip()方法去掉字串兩端,左邊和右邊的字元;

- 方法二:刪除單個固定位置的字元,可以使用切片+拼接的方式;

- 方法三:字串的replace()方法或正規表示式re.sub()刪除任意位置字元。

# -*- coding: utf-8 -*-

import re

s1 = " hello "

# 方法一

print s1.strip()

s2 = "hello\r\n"

# 方法二

print s2[:-2]

# 方法三,replace()

print s2.replace("\r", "")

# 方法三,sub.re()

print re.sub("[\r]", "", s2)

執行結果為:

hello

hello

hello

hello

問題為如何去除unicode中組合字元(音調):』zhào』。

u = u'zhào'

print u.translate()

其輸出結果為:

zho
輸出結果中『zhào』的『à』去除了,但我們本意是去除『a』的音調。除此之外,本方法有個問題就是需要事先知道unicode中組合字元的ascii。對於這個問題,我們可在shell下得知,但若在python 3.x版本中就無法通過shell得知。

根據北門吹雪(o(∩_∩)o謝謝)的部落格可得到python 3.x版本的解決辦法,其**如下:

import sys

import unicodedata

u = "zhào"

'''  通過使用dict.fromkeys() 方法構造乙個字典,每個unicode和音調作為鍵,對於的值全部為none

然後使用unicodedata.normalize() 將原始輸入標準化為分解形式字元

sys.maxunicode : 給出最大unicode**點的值的整數,即1114111(十六進製制的0x10ffff)。

unicodedata.combining:將分配給字元chr的規範組合類作為整數返回。 如果未定義組合類,則返回0。

'''s = unicodedata.normalize('nfd', u)

cmb_chrs = dict.fromkeys(c for c in range(sys.maxunicode) if unicodedata.combining(chr(c)))

'''   呼叫translate 函式刪除所有音調

'''print(s.translate(cmb_chrs))

執行結果為:

zhao
python 2.x的版本的**如下:

import sys

import unicodedata

u = u'zhào'

s = unicodedata.normalize('nfd', u)

cmb_chrs = dict.fromkeys(c for c in range(sys.maxunicode) if unicodedata.combining(unichr(c)))

print s.translate(cmb_chrs)

執行結果與python 3.x版本的結果一致。

4 6如何去掉字串中不需要的字元

coding utf 8 實際案例 1.過濾掉使用者輸入中前後多餘的空白字元 nick2008 gmail.com 2.過濾某windows下編輯文字中的 r hello world r n 3.去掉文字中的unicode組合符號 音調 u 解決方案 方法一 字串strip lstrip rstri...

關於delete字串 需不需要加

今天在寫c 練習題時產生乙個疑惑 new出字元陣列後 需不需要在delete時加 按道理 只要是陣列應該都要加的,但是答案沒有加,於是晚上回來上機執行 環境 devc include include using namespace std 有一些些成員是之前用到的 不過不影響測試 class cba...

去掉字串不需要的HTML標記(正規表示式)

具體實現如下 除掉html保留格式外的其他格式 string holdtags 保留的關鍵字 string regstr string.format s?string.join b s?holdtags system.text.regularexpressions.regex reg new sys...