簡體   English   中英

在python中分隔字符串的特定部分

[英]Separating specific portion of a string in python

我通過 SCPI 向電源發送信息。 我創建了一個 GUI 來顯示它的響應。 其中一個響應是一條錯誤消息,它是一個字符串,它包含一個字符、一個數字、一個逗號和幾個引號中的單詞。 例如:+0,"No Error" 我只需要提取引號中的內容,因此顯示的是 No Error。 我試圖拆分它,然后從引號中截斷它,但是它從來沒有像我需要的那樣干凈,而且我不能通過簡單地執行 _mystring[4:-1] 來剪切字符串,因為正在發送一些錯誤代碼背面是不同的長度。 IE。 -400,"查詢錯誤"

所以做 _mystring[4:-1] 會顯示 ","Query Error"

幫助

通過內置re庫的正則表達式用於提取字符串的一部分,匹配給定的模式。

模式解釋: '\"(.*)\"'

  • 查找引號
  • 捕獲任意數量的字符,直到找到另一個引號
  • 由於.findall()方法返回所有匹配項,(零個、一個或多個) [0]索引並簡單地返回第一個匹配項。

.findall()方法的文檔鏈接在這里

示例代碼:

import re

string = '+0,"No Error"'
re.findall('\"(.*)\"', string)[0]

輸出:

'No Error'

迭代測試:

str1 = '+0,"No Error"'
str2 = '-400,"Query Error"'
rexp = re.compile('\"(.*)\"')

for string in [str1, str2]:
    print(rexp.findall(string)[0])

輸出:

No Error
Query Error

使用字符串split方法的基本方法:

response = '+0,"No Error"'

msg = response.split('"')[1]

print(msg)
#No Error

對於更強大的解決方案,請考慮使用正則表達式。

考慮使用正則表達式

import re

message = '-400,"Query Error"'
pattern = '(.)([0-9]+),"([^"]*)"'
result = re.match(pattern, message)

symbol = result.group(1)
code = int(result.group(2))
text = result.group(3)

print(f'symbol: {symbol}\ncode: {code}\ntext: {text}')

這里pattern定義了由括號表示的 3 個組。

  1. 第一組包含單個字符,如. 匹配任何字符。
  2. 第二組包含一個或多個數字的序列
  3. 第三組包含除引號中的引號以外的任意數量的字符。 報價從組中排除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM