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



我正在通过SCPI向电源发送信息。我创建了一个GUI来显示它的响应。其中一个响应是一个错误消息,它是一个字符串,它有一个字符,一个数字,一个逗号和几个引号中的单词。例:+ 0,"没有Error"我需要提取引号中的内容,因此将显示的内容是No Error。我试图分割它,然后从引号截断它,但是它从来没有像我需要的那样干净,我不能通过简单地做_mystring[4:-1]来切割字符串,因为一些错误代码被发送回来是不同的长度。ie。-400年,"查询Error"

这样做_mystring[4:-1]将显示","查询错误">

帮助

通过内置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

使用stringsplit-method的基本方法:

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. 第三组包含引号中除引号外的任意数量的字符。引用将从组中排除。

相关内容

  • 没有找到相关文章

最新更新