来自bye likeobj的Python正则表达式

2024-04-24 04:59:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我在windows中使用以下代码:

hostname = Popen(['hostname'], stdout=PIPE, stderr=PIPE)
stdout, stderr = process.communicate()

print(stdout)

regex = compile(b'('CO.*)')

m = regex.match(stdout)
if m != None:
    print(m)
else:
    print("Doesn't match")

我得到输出:

b'COMPUTER\r\n'
<_sre.SRE_Match object; span=(0, 15), match=b'COMPUTER\r'>

我知道,在这种情况下,我可以使用更简单的方法(但由于某些原因,我不想使用它):

socket.gethostname()

问题是,我不喜欢正则表达式匹配的整个输出:

<_sre.SRE_Match object; span=(0, 15), match=b'COMPUTER\r'>

我不只是COMPUTER。你知道吗

有没有可能不用另一个正则表达式?你知道吗


Tags: 代码objectwindowsmatchstderrstdouthostnamecomputer
2条回答

这将得到字节字符串:m.group(1)。但是对于这个问题,不要使用regex,这是一种过度杀伤力。相反,使用if stdout.startswith(b'CO'):

您的regex包含Python语法错误,您不需要编译regex(re.match(b'(CO.*)', stdout)就可以了)。为什么不使用socket.gethostbyname()?您是否在实际代码中执行hostname以外的操作?你知道吗

打印m时,您将获得sre对象的表示形式(用于调试目的)

为了克服小的打嗝,你可以做:

m.group(1).decode("ascii").rstrip()
  • 从正则表达式中提取组
  • 解码到str(去掉b前缀)
  • subprocess输出中去掉CR+LF尾随字符

相关问题 更多 >