我使用一个正则表达式来构建一个列在第行(字符串)上的所有键值对的列表。 我的密钥对语法尊重/匹配以下正则表达式:
re.compile("\((.*?),(.*?)\)")
通常,我必须解析如下字符串:
^{pr2}$如果我用翻译就可以了
str = "(hex,0x123456)"
>>> KeyPair = re.findall(MyRegex, str)
>>> KeyPair
[('hex', '0x123456')]
但当我在linux下使用该代码解析命令行输出时,我得到:
[('hex', '0x123456\x00')]
它来自以下代码
KeyPayList = []
# some code ....
process = subprocess.Popen(self.cmd_line, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=False, stdin=subprocess.PIPE)
# here we parse the output
for line in process.stdout:
if line.startswith(lineStartWith):
KeyPair = re.findall(MyRegex, line.strip())
KeyPayList.append(KeyPair)
你知道我为什么在我抓到的第二组中出现这种奇怪的现象吗?
请注意,在调用findall
之前,我已经尝试剥离字符串。在
很简单,在您的例子中,
process.stdout
迭代器生成的字符串包含空字节。在没有要删除的特定字符列表,
strip
删除空白字符。这意味着制表符、换行符、垂直制表符、换行符、回车符和空格键。在其中许多与大多数应用程序无关,但如果要删除空字符,则必须显式声明。例如,如果您想删除制表符、空格和空字符,那么您可以编写
这是一个空字节,它存在于原始字符串中。您可能没有看到它,因为当您打印字符串时,您的终端将忽略它:
用于容器内容的Python
^{pr2}$repr()
函数(例如您在这里打印的tuple的内容)会显示它:正则表达式只是返回空字节,因为它存在于原始字符串中:
如果要删除它,正则表达式引擎也不会返回它:
相关问题 更多 >
编程相关推荐