当前位置: 首页 > 面试题库 >

正则表达式以匹配YAML中的密钥

钮兴安
2023-03-14
问题内容

我有一个看起来像这样的Yaml
..!用户可以定义的N个xyz_flovor_id,其中_flovor_id关键将是常见的。目的是获取*_flavor_id密钥并从中提取价值。

  server:
    tenant: "admin"
    availability_zone: "nova"
    cpu_overcommit_ratio: 1:1
    memory_overcommit_ratio: 1:1
    xyz_flovor_id: 1
    abc_flavor_id: 2

我能够找到正则表达式来匹配_flovor_id。但是,在尝试在代码中使用它时会引发错误。这是我的代码。

def get_flavor_keys(params):
    pattern = re.compile(r'[^*]flavor_id')
    for key, value in params.iteritems():
        print value
        if key == 'server':
            if pattern.match(value):
                print 'test'

print value正在转储整个YAML文件(预期)。之后立即回溯。

Traceback (most recent call last):
  File "resource_meter.py", line 150, in <module>
    get_flavor_keys(items)
  File "resource_meter.py", line 15, in get_flavor_keys
    if pattern.match(value):
TypeError: expected string or buffer

问题答案:

您需要此正则表达式。我将其分组为键值对:

^\s*(?P<key>\w+_flavor_id):\s*(?P<value>\d+)

Python演示:https://repl.it/Lk5W/0

import re

regex = r"^\s*(?P<key>\w+_flavor_id):\s*(?P<value>\d+)"

test_str = ("  server:\n"
    "    tenant: \"admin\"\n"
    "    availability_zone: \"nova\"\n"
    "    cpu_overcommit_ratio: 1:1\n"
    "    memory_overcommit_ratio: 1:1\n"
    "    xyz_flavor_id: 1\n"
    "    abc_flavor_id: 2\n")

matches = re.finditer(regex, test_str, re.MULTILINE)

for matchNum, match in enumerate(matches):
    print ("{key}:{value}".format(key = match.group('key'), value=match.group('value')))


 类似资料:
  • 有没有人试图描述与正则表达式匹配的正则表达式? 由于重复的关键字,这个主题几乎不可能在网上找到。 它可能在实际应用程序中不可用,因为支持正则表达式的语言通常具有解析它们的方法,我们可以将其用于验证,以及一种在代码中分隔正则表达式的方法,可用于搜索目的。 但是我仍然想知道匹配所有正则表达式的正则表达式是什么样子的。应该可以写一个。

  • 我们得到了一些这样的内容:

  • 问题内容: 我实现了如下所示的Pattern类:http : //www.java2s.com/Code/Java/GWT/ImplementjavautilregexPatternwithJavascriptRegExpobject.htm 我想使用以下正则表达式来匹配我的String中的网址: 不幸的是,Java编译器当然无法解析该字符串,因为它不使用有效的转义序列(因为从技术上讲,以上是Ja

  • 问题内容: 在使用正则表达式时,我使用RegexBuddy。我从其库中复制了正则表达式以匹配URL。我在RegexBuddy中成功测试。但是,当我将其复制为Java 样式并将其粘贴到Java代码中时,它将无法正常工作。以下类打印: 有人知道我在做什么错吗? 问题答案: 请尝试以下正则表达式字符串。你的测试可能以区分大小写的方式进行。我添加了小写字母Alpha以及正确的字符串开头占位符。 这也适用:

  • 寻找以下规则验证密码的帮助: 8个字符 包含至少1个大写字母 包含至少1个小写字母 包含至少一个数字 不能以数字开头 不包含特殊字符 我已经做到了:

  • 主要内容:基本模式匹配,字符簇,确定重复出现基本模式匹配 一切从最基本的开始。模式,是正则表达式最基本的元素,它们是一组描述字符串特征的字符。模式可以很简单,由普通的字符串组成,也可以非常复杂,往往用特殊的字符表示一个范围内的字符、重复出现,或表示上下文。例如: 这个模式包含一个特殊的字符 ^,表示该模式只匹配那些以 once 开头的字符串。例如该模式与字符串 "once upon a time" 匹配,与 "There once was