1

我收到一条带有标头的消息,该标头指定了数据的长度。在我的示例中,我有一条 28 个字符的消息要处理。

我试图找到某种方法在同一个正则表达式中使用匹配的数字作为重复计数,就像这个不工作的例子:

s = "message 28\r\nthis is some random sentence"
matches = re.match(r"(?P<command>\S+)\s+(?P<bytes>\d+)\r\n(?P<data>.{(?P=bytes)})", s, re.DOTALL).groupdict()

我的理解是我的 (?P=bytes) 是与“字节”命名组匹配的相同字符串的匹配项,而不是允许我任意更改正则表达式,这就是它不起作用的原因,但是有什么方法可以实现我不想通过两个正则表达式传递我的字符串?

4

1 回答 1

5

不可能编写一个可以匹配长度的正则表达式,然后将该长度用作量词中的反向引用。

可以使用正则表达式求长度,然后使用普通的字符串切片操作从字符串中提取出合适的字符。

于 2012-08-05T20:39:22.020 回答