捕获量化正则表达式中的所有匹配项

多米尼克·乔治

我试图使用正则表达式从字符串中捕获重复的模式。更准确地说,我正在尝试解析LDAP模式定义。

一个示例字符串:

( 1.3.6.1.4.1.1466.115.121.1.8 DESC 'Certificate' X-BINARY-TRANSFER-REQUIRED 'TRUE' X-NOT-HUMAN-READABLE 'TRUE' )

与字符串和所有相关组件匹配的正则表达式(Python /扩展正则表达式)为:

^\( (?P<oid>\d+(\.\d+)*) ((?P<keyword>[A-Z-]+) (?P<value>[^' ]+|'[^']+'|\(.+\)) )+\)$

我已经命名了相关的匹配组。问题是我如何捕获P和P的所有出现?默认情况下,仅捕获最后一次出现,而其他仅匹配。

卡西米尔和希波吕特

如果您使用新的regex模块则可以使用一种方法来存储重复捕获组的结果,例如:

import regex

line = '''( 1.3.6.1.4.1.1466.115.121.1.8 DESC 'Certificate' X-BINARY-TRANSFER-REQUIRED 'TRUE' X-NOT-HUMAN-READABLE 'TRUE' )'''

pattern = r'''(?x) # switch the VERBOSE (free-spacing) mode on
^                  
\( [ ]*
(?P<oid>\d+(?:\.\d+)*) \s+  # use a non-capturing group when there is
(?:                         # no need to capture something
    (?P<keyword>[A-Z-]+) [ ]+
    (?P<value> [^' ]+ | '[^']*' | \(.+\)) [ ]*
)+
\)
$ 
'''

m = regex.match(pattern, line)
print m.capturesdict()

您获得:

{'oid': ['1.3.6.1.4.1.1466.115.121.1.8'], 'keyword': ['DESC', 'X-BINARY-TRANSFER-REQUIRED', 'X-NOT-HUMAN-READABLE'], 'value': ["'Certificate'", "'TRUE'", "'TRUE'"]}

关于子模式\(.+\)

看起来似乎是一种奇怪的处理嵌套paren的方法(由于贪婪的量词)。但是,如果paren之间只有一个值,则该子模式将提供预期的结果。

再有一次,新的正则表达式模块使您可以重用子模式(在捕获组中定义),从而可以构建递归模式,例如:

(\((?>[^()]+|(?1))*\))

(其中(?1)指的是捕获组1中的模式(子模式本身))

因此,您可以像这样重写value子模式:

(?P<value> [^' ]+ | '[^']*' | (\((?>[^()]+|(?1))*\)) )

注意:但是,如果您不打算处理嵌套的括号,请忘记使用它 \([^)]*\)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

捕获量化正则表达式中的所有匹配项

来自分类Dev

正则表达式捕获每组定界符之间的所有匹配项

来自分类Dev

使用D捕获并存储正则表达式的所有匹配项

来自分类Dev

正则表达式将匹配项中的所有匹配项替换x次

来自分类Dev

生成正则表达式的所有匹配项

来自分类Dev

查找所有正则表达式匹配项

来自分类Dev

正则表达式返回所有匹配项

来自分类Dev

查找所有正则表达式匹配项

来自分类Dev

正则表达式子方法不会替换python正则表达式中的所有匹配项

来自分类Dev

使用Python正则表达式捕获组中的所有重复项

来自分类Dev

使用Python正则表达式捕获组中的所有重复项

来自分类Dev

在Bash中查看文件中的所有正则表达式匹配项

来自分类Dev

正则表达式-查找字符串中的所有匹配项

来自分类Dev

如何在文件中查找所有正则表达式匹配项

来自分类Dev

使用正则表达式查找字符串中的所有匹配项

来自分类Dev

Python正则表达式,如何从字符串中删除所有匹配项

来自分类Dev

正则表达式替换html标记中的所有匹配项

来自分类Dev

如何在PHP中获取所有正则表达式匹配项?

来自分类Dev

将所有正则表达式匹配项放入数组中?

来自分类Dev

将Textpad或Notepad ++中的所有正则表达式匹配项导出为列表

来自分类Dev

正则表达式不会在PHP中输出所有可能的匹配项

来自分类Dev

Node.js中的正则表达式未显示所有匹配项

来自分类Dev

正则表达式不返回javascript中的所有匹配项

来自分类Dev

使用正则表达式查找字符串中的所有匹配项

来自分类Dev

正则表达式捕获:将整个匹配项包含在捕获组中

来自分类Dev

正则表达式捕获:将整个匹配项包含在捕获组中

来自分类Dev

Java正则表达式匹配器未找到所有可能的匹配项

来自分类Dev

正则表达式匹配所有内容,但保留一些指定的匹配项

来自分类Dev

正则表达式匹配首次出现的所有匹配项

Related 相关文章

  1. 1

    捕获量化正则表达式中的所有匹配项

  2. 2

    正则表达式捕获每组定界符之间的所有匹配项

  3. 3

    使用D捕获并存储正则表达式的所有匹配项

  4. 4

    正则表达式将匹配项中的所有匹配项替换x次

  5. 5

    生成正则表达式的所有匹配项

  6. 6

    查找所有正则表达式匹配项

  7. 7

    正则表达式返回所有匹配项

  8. 8

    查找所有正则表达式匹配项

  9. 9

    正则表达式子方法不会替换python正则表达式中的所有匹配项

  10. 10

    使用Python正则表达式捕获组中的所有重复项

  11. 11

    使用Python正则表达式捕获组中的所有重复项

  12. 12

    在Bash中查看文件中的所有正则表达式匹配项

  13. 13

    正则表达式-查找字符串中的所有匹配项

  14. 14

    如何在文件中查找所有正则表达式匹配项

  15. 15

    使用正则表达式查找字符串中的所有匹配项

  16. 16

    Python正则表达式,如何从字符串中删除所有匹配项

  17. 17

    正则表达式替换html标记中的所有匹配项

  18. 18

    如何在PHP中获取所有正则表达式匹配项?

  19. 19

    将所有正则表达式匹配项放入数组中?

  20. 20

    将Textpad或Notepad ++中的所有正则表达式匹配项导出为列表

  21. 21

    正则表达式不会在PHP中输出所有可能的匹配项

  22. 22

    Node.js中的正则表达式未显示所有匹配项

  23. 23

    正则表达式不返回javascript中的所有匹配项

  24. 24

    使用正则表达式查找字符串中的所有匹配项

  25. 25

    正则表达式捕获:将整个匹配项包含在捕获组中

  26. 26

    正则表达式捕获:将整个匹配项包含在捕获组中

  27. 27

    Java正则表达式匹配器未找到所有可能的匹配项

  28. 28

    正则表达式匹配所有内容,但保留一些指定的匹配项

  29. 29

    正则表达式匹配首次出现的所有匹配项

热门标签

归档