[Python基礎]檢查及過濾字串中的特殊字符

更新於 發佈於 閱讀時間約 5 分鐘

在實務上,條碼槍傳送的資訊可能包含不可見字符控制字符。這可能是因為條碼槍在傳送條碼數據時使用了一些特殊字符,這些字符在可見字符集合之外,例如 \x06 就是 ASCII 中的 "ACK" 控制字符。

本文將探討,如何查詢處理這些特殊字符

在 Python 中,不可見字符通常指的是 ASCII 字符集中的控制字符和一些特殊字符,它們在顯示時不會產生可見的印刷效果。

以下是一些常見的不可見字符

控制字符:
\n換行符 (Line Feed) → 在字串中表示換行,移動到下一行的開始位置。
\r回車符 (Carriage Return) → 移動光標到當前行的開始位置,用於覆蓋該行的內容。
\t水平制表符 (Tab) → 插入水平制表,通常用於在字串中插入空格,以達到對齊的效果。
\b退格符 (Backspace) → 將光標向左移動一格,可用於消除前一字符。
\f換頁符 (Form Feed) → 在某些情境中,表示換頁,用於在輸出中插入頁面分隔符。
\v垂直制表符 (Vertical Tab) → 插入垂直制表,用於在字串中插入空格,達到對齊的效果。
\a響鈴字符 (Bell) → 觸發響鈴聲或警告聲。在現代終端中,通常不會實際發出聲音,而是視為通知或警告。

特殊空白字符:
\s空格符 (Space) → 表示一個普通的空格。
\f換頁符 (Form Feed) → 類似於控制字符中的 \f,表示換頁。
\v垂直制表符 (Vertical Tab) → 類似於控制字符中的 \v,表示垂直制表。
\u200B零寬空格 (Zero Width Space) → 表示一個不佔據實際寬度的空格,通常在排版和格式化文本時使用。
\u00A0不中斷空白 (Non-Breaking Space) → 表示一個不會被自動斷行的空格,常用於確保連續的文字不會被分開。

其他控制字符:
\x00 到 \x1FASCII 控制字符的範圍,包括空白字符、退格、換行等。
\x7F刪除字符


查詢不可見字符

repr()

可以將字符串轉換包含可見和不可見為字符的表示形式。

print(repr(your_string))

範例說明

假設讀取到的條碼槍含有\x06字符,假設條碼資訊為DEF,若未處理可能會造成傳送錯誤的資料\x06DEF,所以先用repr()檢查是否包含不可見字符。

# 假設這是從條碼槍讀取的字符串
barcode_data = "ABC\x06DEF"

# 使用 repr() 函數來查看字符串的 Python 表示形式
repr_of_barcode = repr(barcode_data)

# 打印結果'
print(f'原始字串:{barcode_data}')
print(f'處理過後: {repr_of_barcode}')
repr()範例

repr()範例


過濾不可見字符:

使用正則表達式re.sub,過濾掉字串中的不可見字符​

re.sub 是 Python 中 re 模組中的一個函數

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

pattern: 要匹配的正則表達式。
repl: 用於替換匹配字串的字符串。
string: 要進行替換的原始字符串。
count (可選): 替換的最大次數,默認為 0(替換所有匹配)。
flags (可選): 正則表達式的標誌,用於修改匹配的行為

範例說明

正則化後,就將控制字符\x06移除了,顯示正常字串。

repr_of_barcode = repr(barcode_data)只是將可見與不可見字符,一起轉換成字串顯示,若將repr_of_barcode丟進去該範例的正則化表示,則不會過濾\x06喔,因為已經都轉成字串了。

import re

# 假設這是從條碼槍讀取的字符串
barcode_data = "ABC\x06DEF"

# 使用 repr() 函數來查看字符串的 Python 表示形式
repr_of_barcode = repr(barcode_data)

#使用正則化 保留 ASCII 字符範圍內的可見字符
re_barcode = re.sub(r'[^\x20-\x7E]', '', barcode_data)
# 打印結果'
print(f'原始字串:{barcode_data}')
print(f'repr()處理過後: {repr_of_barcode}')
print(f'正則化: {re_barcode}')
正則表達式

正則表達式

隨手紀錄,遇到的狀況及整理後的心得




avatar-img
131會員
218內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
螃蟹_crab的沙龍 的其他內容
前幾篇討論到各種裝飾器的用法,本文將介紹另外一種裝飾器,可以將方法轉換成屬性來使用。 property也可以動態的取出物件的值,隨著時間或其他運算改變所產生的值,讓我們繼續往下看更多介紹吧。
先前我們談論到靜態方法就像是定義工具箱一樣,那麼抽象方法就像是共用表格的概念,例如註冊帳號時會填寫的一些基本資料,就有包含制式的表格,裡面有需填寫的欄位,例如姓名,性別等。
先前學到自定函式的使用方法,那如果在一個很龐大的程式架構中發散了一推自定函式,有沒有辦法可以整理一下,讓程式結構整齊又簡潔呢? 可以使用裝飾器staticmethod 定義靜態方法,全部整理到一個類別去,想像成是一個工具箱的概念,工具箱就是類別,靜態方法就像是裡面的工具一樣。
在使用類別創建實例時,輸入的屬性的都要定義好資料型態,例如dog_1 = Dog("Buddy", 3),有沒有輸入一段字串讓他自己判斷的方法阿? 有的就是使用classmethod: classmethod 是一種裝飾器,它用於定義類別方法。類別方法與實例方法不同,它們被綁定到類別而不是實例。
當你想讓原本函式新增其他功能,又不想更動原本函式時,Python提供了一種強大而靈活的工具,那就是裝飾器。 但對於新手來說這個裝飾器,非常抽象難以理解,讓我們繼續往下看,慢慢的抽絲剝繭吧。 在 Python 中,使用「@」當做裝飾器使用的語法糖符號
在人與人溝通之間,最怕雞同鴨講,彼此不對頻的狀況常會造成誤會。在程式語言中也會出現類似的情況,所以就有一些約定來彼此約束。 PEP 8 是 Python 社群廣泛遵循的一種風格指南,用於提高 Python 程式碼的可讀性和一致性。一開始是 Python 之父 Guido van Rossum 自己
前幾篇討論到各種裝飾器的用法,本文將介紹另外一種裝飾器,可以將方法轉換成屬性來使用。 property也可以動態的取出物件的值,隨著時間或其他運算改變所產生的值,讓我們繼續往下看更多介紹吧。
先前我們談論到靜態方法就像是定義工具箱一樣,那麼抽象方法就像是共用表格的概念,例如註冊帳號時會填寫的一些基本資料,就有包含制式的表格,裡面有需填寫的欄位,例如姓名,性別等。
先前學到自定函式的使用方法,那如果在一個很龐大的程式架構中發散了一推自定函式,有沒有辦法可以整理一下,讓程式結構整齊又簡潔呢? 可以使用裝飾器staticmethod 定義靜態方法,全部整理到一個類別去,想像成是一個工具箱的概念,工具箱就是類別,靜態方法就像是裡面的工具一樣。
在使用類別創建實例時,輸入的屬性的都要定義好資料型態,例如dog_1 = Dog("Buddy", 3),有沒有輸入一段字串讓他自己判斷的方法阿? 有的就是使用classmethod: classmethod 是一種裝飾器,它用於定義類別方法。類別方法與實例方法不同,它們被綁定到類別而不是實例。
當你想讓原本函式新增其他功能,又不想更動原本函式時,Python提供了一種強大而靈活的工具,那就是裝飾器。 但對於新手來說這個裝飾器,非常抽象難以理解,讓我們繼續往下看,慢慢的抽絲剝繭吧。 在 Python 中,使用「@」當做裝飾器使用的語法糖符號
在人與人溝通之間,最怕雞同鴨講,彼此不對頻的狀況常會造成誤會。在程式語言中也會出現類似的情況,所以就有一些約定來彼此約束。 PEP 8 是 Python 社群廣泛遵循的一種風格指南,用於提高 Python 程式碼的可讀性和一致性。一開始是 Python 之父 Guido van Rossum 自己
你可能也想看
Google News 追蹤
Thumbnail
/ 大家現在出門買東西還會帶錢包嗎 鴨鴨發現自己好像快一個禮拜沒帶錢包出門 還是可以天天買滿買好回家(? 因此為了記錄手機消費跟各種紅利優惠 鴨鴨都會特別注意銀行的App好不好用! 像是介面設計就是會很在意的地方 很多銀行通常會為了要滿足不同客群 會推出很多App讓使用者下載 每次
Thumbnail
PyQt 中的 pyqtSignal 和 pyqtSlot 教學 在使用 PyQt5 開發 GUI 程式時,信號 (Signal) 和 槽 (Slot) 是重要的機制,用於元件之間的通訊。 PyQt 提供了 pyqtSignal 和 pyqtSlot 來自定義信號和槽,進一步實現更靈活的功能。
Thumbnail
監督式學習是機器學習的一種方法,通過利用標註數據進行訓練,模型學習輸入特徵與結果標籤間的關係。此方法分為分類與回歸兩類,並涵蓋了多種算法如線性回歸、邏輯回歸和決策樹等。每種算法各有優缺點,適用於不同的應用場景。學習這些內容有助於理解如何選擇合適的模型以解決實際問題。
Thumbnail
本文介紹了在進行資料分析時,將類別欄位轉換為數值欄位的方法,包括Label Encoding、One-Hot Encoding、Binary Encoding、Target Encoding和Frequency Encoding。每種方法的應用範例、優缺點和適用場景都有詳細說明。
Thumbnail
瞭解航空無線電通話的字母與數字發音,以及名詞統一的問題及解決方式。
Thumbnail
一維條碼 (Barcode) 是最常見和最早期的條碼形式,主要由一組平行的黑色條紋和空白間隔組成,用於表示數字或字符數據。這些條碼主要用於產品識別和管理,廣泛應用於零售、物流和庫存管理等領域。 一維條碼的特點 結構簡單:由一系列寬窄不同的條紋和空白間隔組成,數據以水平排列的方式表示。
Thumbnail
看到題目問「種類」時,集合就是你最好的朋友。
Thumbnail
本文介紹如何對 Telegram 憑證監控機器人的代碼進行優化,包括新增指令、讀取變數、提高可讀性和可維護性。
NumPy(Numeric Python)是Python中用於科學計算的核心庫之一。它提供了高性能的多維陣列對象(即ndarray)以及用於處理這些陣列的各種函數和工具。 在NumPy中,有幾個常用的指令可以用來創建陣列
Thumbnail
讓我們從程式開始看起,我們輸入的鍵都是KeY,卻在寫入ini時,都轉換成小寫了。 因為預設情況下,configparser 會將配置文件中的鍵(Key)轉換成小寫形式。也就是說,即使配置文件中鍵的寫法是大寫或混合大小寫,讀取時都會轉換成小寫。 如以下的程式範例 其中的鍵值為KeY1 KeY2
Thumbnail
當我們在做很多處理時,結果可能會是List包住一些數值,例如找輪廓或連通域分析時,沒有剛好的特徵可能就會有List含(空值得)形式出現。 為了避免報錯,我們就要額外先做一些處理,先做判斷是否有值在往下一個階段。 all 和 any 是 Python 中用於檢查可迭代物件(如清單、元組、集合等)
Thumbnail
/ 大家現在出門買東西還會帶錢包嗎 鴨鴨發現自己好像快一個禮拜沒帶錢包出門 還是可以天天買滿買好回家(? 因此為了記錄手機消費跟各種紅利優惠 鴨鴨都會特別注意銀行的App好不好用! 像是介面設計就是會很在意的地方 很多銀行通常會為了要滿足不同客群 會推出很多App讓使用者下載 每次
Thumbnail
PyQt 中的 pyqtSignal 和 pyqtSlot 教學 在使用 PyQt5 開發 GUI 程式時,信號 (Signal) 和 槽 (Slot) 是重要的機制,用於元件之間的通訊。 PyQt 提供了 pyqtSignal 和 pyqtSlot 來自定義信號和槽,進一步實現更靈活的功能。
Thumbnail
監督式學習是機器學習的一種方法,通過利用標註數據進行訓練,模型學習輸入特徵與結果標籤間的關係。此方法分為分類與回歸兩類,並涵蓋了多種算法如線性回歸、邏輯回歸和決策樹等。每種算法各有優缺點,適用於不同的應用場景。學習這些內容有助於理解如何選擇合適的模型以解決實際問題。
Thumbnail
本文介紹了在進行資料分析時,將類別欄位轉換為數值欄位的方法,包括Label Encoding、One-Hot Encoding、Binary Encoding、Target Encoding和Frequency Encoding。每種方法的應用範例、優缺點和適用場景都有詳細說明。
Thumbnail
瞭解航空無線電通話的字母與數字發音,以及名詞統一的問題及解決方式。
Thumbnail
一維條碼 (Barcode) 是最常見和最早期的條碼形式,主要由一組平行的黑色條紋和空白間隔組成,用於表示數字或字符數據。這些條碼主要用於產品識別和管理,廣泛應用於零售、物流和庫存管理等領域。 一維條碼的特點 結構簡單:由一系列寬窄不同的條紋和空白間隔組成,數據以水平排列的方式表示。
Thumbnail
看到題目問「種類」時,集合就是你最好的朋友。
Thumbnail
本文介紹如何對 Telegram 憑證監控機器人的代碼進行優化,包括新增指令、讀取變數、提高可讀性和可維護性。
NumPy(Numeric Python)是Python中用於科學計算的核心庫之一。它提供了高性能的多維陣列對象(即ndarray)以及用於處理這些陣列的各種函數和工具。 在NumPy中,有幾個常用的指令可以用來創建陣列
Thumbnail
讓我們從程式開始看起,我們輸入的鍵都是KeY,卻在寫入ini時,都轉換成小寫了。 因為預設情況下,configparser 會將配置文件中的鍵(Key)轉換成小寫形式。也就是說,即使配置文件中鍵的寫法是大寫或混合大小寫,讀取時都會轉換成小寫。 如以下的程式範例 其中的鍵值為KeY1 KeY2
Thumbnail
當我們在做很多處理時,結果可能會是List包住一些數值,例如找輪廓或連通域分析時,沒有剛好的特徵可能就會有List含(空值得)形式出現。 為了避免報錯,我們就要額外先做一些處理,先做判斷是否有值在往下一個階段。 all 和 any 是 Python 中用於檢查可迭代物件(如清單、元組、集合等)