云雀:如何使文字出现在

2024-10-04 11:28:06 发布

您现在位置:Python中文网/ 问答频道 /正文

使用Python。 在我的语法中,我有这样一句话:

ipv6_comp: [ipv6_hex (":" ipv6_hex)~0..5] "::" [ipv6_hex (":" ipv6_hex)~0..5]

我的变压器有适当的功能

def ipv6_comp(self, args):

然而,args看起来是这样的:

<class 'list'>: ['2001', 'db8', '85a3', '8a2e', '370', '7334']

因为文字不包括在内。然而,从这个结构中,我显然不可能知道原始ip是否像以下任何一个:

2001:db8:85a3::8a2e:370:7334
2001:db8:85a3:8a2e::370:7334

我想我可以用它们自己的规则来掩盖文字,比如

colon: ":"
doublecolon: "::"
ipv6_comp: [ipv6_hex (colon ipv6_hex)~0..5] doublecolon [ipv6_hex (colon ipv6_hex)~0..5]

甚至可能更干净。但是,我使用的语法是半自动生成的,这将需要更多的手工劳动。你知道吗

我的transformer函数ipv6_comp是否也有办法在args参数中包含文字?你知道吗


Tags: self功能def语法argslistclassipv6
1条回答
网友
1楼 · 发布于 2024-10-04 11:28:06

有两种方法可以解决你的问题。你知道吗

  1. ipv6_comp变成终端。然后Lark将在一个regexp中匹配所有字符,并返回所有匹配的字符:
    IPV6_COMP: [HEX (":" HEX)~0..5] "::" [HEX (":" HEX)~0..5]
  1. 为你的标点符号提供一个名称(你建议的,但作为终端)

    冒号:“:”

  2. 使用!运算符在规则中包含标点符号(即:未命名符号)

    !ipv6_comp: [ipv6_hex (":" ipv6_hex)~0..5] "::" [ipv6_hex (":" ipv6_hex)~0..5]

我推荐第一种解决方案,因为解析速度更快,而且在解析完成后,可以使用专用库将IPv6地址解析为组件。你知道吗

相关问题 更多 >