【发布时间】:2017-11-22 21:21:16
【问题描述】:
我有一个从 pexpect 的 session.before 得到的字符串对象。
从此我正在尝试re.search 使用以下正则表达式获取设备ID。但它不匹配。
print (str(sess.before))
b'\r\n* daemon not running. starting it now on port 5037 *\r\n* daemon started successfully *\r\n353651\tdevice\r\n\r\n\r\n'
device_id = re.search ('([0-9a-zA-Z]+)[\t ]+device', str(sess.before))
print (device_id)
None
【问题讨论】:
-
@Wiktor:有点。问题主要在于
str()调用是将bytes对象转换为字符串的一种非常错误的方法。 -
@MartijnPieters:我只是想知道为什么 OP 有
b'\r\n*...'而不是"b'\\r\\n*...'"?如果您确定至少有 2 个问题,那么是的,可以重新打开它。 -
@WiktorStribiżew:
print()电话掩盖了这个问题;实际上print(bytesobject)已经在使用str(),所以第一行中的str()是完全多余的。str(sess.before)确实返回"b'\\r\\n*...'",但是当你打印... -
@MartijnPieters 我明白这一点,但这仍然意味着如果
str()两次应用于字节对象,OP 应该写"b'\\r\\n*...'"。 Ashwin,如果您只需要在正则表达式中添加b前缀来解决问题,或者您还必须修改将输入传递给正则表达式的方式,请告知。 -
@WiktorStribiżew:
str()应用于str()不会使用repr(),它只是返回未更改的字符串。不要在这里落入repr()的反向陷阱。
标签: python regex python-3.x pexpect