我有一个奇怪的问题: 我有来自串行端口的字节数据。 我将其解码为:
data.decode("utf8","backslashreplace")
输出看起来像这样:
\xf028B |\x80 10:00p@ @+\x81 :0000
就如我所愿。 但是当我过滤正则表达式时(在regexr.com上工作正常)
data = re.search('(?<=\\x80).{10}?',data)
它找不到任何匹配项。输出为“无”。
我想念什么吗?
答案 0 :(得分:1)
使用您的代码可以产生预期的结果。比较:
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> import re
>>> print(sys.version)
3.7.0 (default, Aug 22 2018, 20:50:05)
[GCC 5.4.0 20160609]
>>> data = '\xf028B |\x80 10:00p@ @+\x81 :0000'
>>> pattern = '(?<=\\x80).{10}?'
>>> print(re.search(pattern, data).group())
10:00p@ @
>>>
屏幕截图:
如果您正在运行Python3.7 Windows,也许会有所作为?
更新:还可以在Windows 10 64位系统上运行的Python3.7.0上使用:
(53734290) C:\Users\daedw\Stackoverflow\53734290>Scripts\python.exe
Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:59:51) [MSC v.1914 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> import re
>>> print(sys.version)
3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:59:51) [MSC v.1914 64 bit (AMD64)]
>>> data = '\xf028B |\x80 10:00p@ @+\x81 :0000'
>>> pattern = '(?<=\\x80).{10}?'
>>> print(re.search(pattern, data).group())
10:00p@ @
>>>