找不到字符串匹配项,尽管应该

时间:2018-12-12 00:13:50

标签: python python-3.x

我有一个奇怪的问题: 我有来自串行端口的字节数据。 我将其解码为:

data.decode("utf8","backslashreplace")

输出看起来像这样:

\xf028B       |\x80 10:00p@ @+\x81   :0000  

就如我所愿。 但是当我过滤正则表达式时(在regexr.com上工作正常)

data = re.search('(?<=\\x80).{10}?',data)

它找不到任何匹配项。输出为“无”。

我想念什么吗?

1 个答案:

答案 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@ @
>>> 

屏幕截图: screencap 如果您正在运行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@ @
>>>

windows屏幕截图: enter image description here