繁体   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