Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中特殊字符的reg ex使用困难_Python_Regex - Fatal编程技术网

python中特殊字符的reg ex使用困难

python中特殊字符的reg ex使用困难,python,regex,Python,Regex,我正在尝试解析一些数据,我需要使用python正则表达式来解析这些数据。 我假设提取整个数据,如下所示 PPP Link Control Protocol Code: Termination Request (0x05) Identifier: 0x03 Length: 45 Data (41 bytes) 0000 58 b0 35 f3 95 81 00 d0 bc 3d 8c 00 08 00 45 00 X.5......=....E. 0010 00 55 7

我正在尝试解析一些数据,我需要使用python正则表达式来解析这些数据。 我假设提取整个数据,如下所示

PPP Link Control Protocol
  Code: Termination Request (0x05)
  Identifier: 0x03
  Length: 45
  Data (41 bytes)

0000  58 b0 35 f3 95 81 00 d0 bc 3d 8c 00 08 00 45 00   X.5......=....E.
0010  00 55 73 1b 00 00 f9 2f 07 18 11 e0 58 9d 11 db   .Us..../....X...
0020  ca ee 30 81 88 0b 00 31 0b 86 00 00 00 0b 00 00   ..0....1........
0030  00 09 ff 03 c0 21 05 03 00 2d 4d 50 50 45 20 72   .....!...-MPPE r
0040  65 71 75 69 72 65 64 20 62 75 74 20 70 65 65 72   equired but peer
0050  20 6e 65 67 6f 74 69 61 74 69 6f 6e 20 66 61 69    negotiation fai
0060  6c 65 64                                          led
数据可以有任何特殊字符。我正在寻找一些可以包含所有特殊字符的reg ex模式,这样我就不必在我的reg ex模式中包含每一个字符。
例如,所有字母和下划线都有“\w”。 对于所有数字,我们都有'\d'。如上所示,提取信息的最简单的reg ex模式是什么

编辑

预期产出为:

0000  58 b0 35 f3 95 81 00 d0 bc 3d 8c 00 08 00 45 00   X.5......=....E.
0010  00 55 73 1b 00 00 f9 2f 07 18 11 e0 58 9d 11 db   .Us..../....X...
0020  ca ee 30 81 88 0b 00 31 0b 86 00 00 00 0b 00 00   ..0....1........
0030  00 09 ff 03 c0 21 05 03 00 2d 4d 50 50 45 20 72   .....!...-MPPE r
0040  65 71 75 69 72 65 64 20 62 75 74 20 70 65 65 72   equired but peer
0050  20 6e 65 67 6f 74 69 61 74 69 6f 6e 20 66 61 69    negotiation fai
0060  6c 65 64                                          led

我认为
用于替换您使用的任何程序的输出中的任何控制字符,因此我们不必处理它们

这个裸正则表达式将给出作为结果一部分的所有行。请关闭DOTALL选项并打开IGNORECASE选项,此选项才能工作。将此函数插入
findall
函数时,可能还需要转义几个字符

[\da-f]+\s+(?:[\da-f]{2}\s+)+.*

基于您的输入和预期输出,我不确定您为什么需要复杂的regexp。您可以逐行处理并检查第一列中的数字:

import re

packet  = open('/tmp/packet', 'r').read()
lines   = packet.split("\n")
pattern = re.compile(r'^\d+')
matches = [ line for line in lines if re.match(pattern, line) ]

print "\n".join(matches)
这将生成您的输出:

0000  58 b0 35 f3 95 81 00 d0 bc 3d 8c 00 08 00 45 00   X.5......=....E.
0010  00 55 73 1b 00 00 f9 2f 07 18 11 e0 58 9d 11 db   .Us..../....X...
0020  ca ee 30 81 88 0b 00 31 0b 86 00 00 00 0b 00 00   ..0....1........
0030  00 09 ff 03 c0 21 05 03 00 2d 4d 50 50 45 20 72   .....!...-MPPE r
0040  65 71 75 69 72 65 64 20 62 75 74 20 70 65 65 72   equired but peer
0050  20 6e 65 67 6f 74 69 61 74 69 6f 6e 20 66 61 69    negotiation fai
0060  6c 65 64                                          ed

提取什么信息?我认为您最好阅读规范并编写代码来处理整个数据包以提取数据。在数据包的某个地方应该有关于长度的信息。@nhahtdh-确切信息如上面的问题所示。如何将reg Ex模式写入此数据包的额外信息(包括“=”、“\”、“-”等特殊字符)。。等我无法找到某种方法来提取可能包含任何特殊字符的信息。由于您没有给出预期的输出,我不知道您想要什么。但我强烈建议您不要使用正则表达式来完成此任务,尽管这可能是一种或另一种方式。预期输出为:0000 58 b0 35 f3 95 81 00 d0 bc 3d 8c 00 08 00 45 00 X.5……=…E。0010 00 55 73 1b 00 00 f9 2f 07 18 11 e0 58 9d 11分贝美国。。。0020 ca ee 30 81 88 0b 00 31 0b 86 00 00 00 00..0….1。。。。。。。。0030 00 09 ff 03 c0 21 05 03 00 2d 4d 50 50 45 20 72-MPPE r 0040 65 71 75 69 72 65 64 20 62 75 74 20 70 65 72需要,但对等0050 20 6e 65 67 6f 74 69 61 74 69 6f 6e 20 66 61 69谈判fai 0060 6c 65 64 led