繁体   English   中英

如何从包含 python 引号的字符串中获取其他两个子字符串之间的字符串

[英]How to get a string between two other substrings from a string which includes quotes in python

我有以下字符串:

name: "gcr.io/myproject/github.com/project/project-1:9246b98256013b49"
digest: "sha256:9a9e3a4fb7072b7"
push_timing {
  start_time {
    seconds: 1660330436
    nanos: 983521156
  }
  end_time {
    seconds: 1660330706
    nanos: 296478248
  }
}

我只想得到'name:'之后的字符串和第一个引号'"'。答案字符串应该是'gcr.io/myproject/github.com/project/project-1:9246b98256013b49'

我一直在尝试使用以下命令,但还没有运气。

image_name = re.search(r'name : "(.*)"', image_info)

那么如何从包含 python 引号的字符串中获取其他两个子字符串之间的字符串?

看起来您正在尝试匹配regex中的额外空格。

这一行:

image_name = re.search(r'name : "(.*)"', image_info)

匹配以name:开头的内容,而在您的文件中,它以name:开头。 注意额外的空间。

一个简单的解决方法是删除空间。

image_name = re.search(r'name: "(.*)"', image_info)

正如评论中提到的@KingsMMA,您的文件似乎是 JSON 文件的形式。 您可以尝试这样解析它,这意味着您可以更轻松地检索文件的其他元素(如digest )。

总是值得检查返回值。 此外,使用命名组有助于使代码更具可读性。 例如:

import re

mystring = """
name: "gcr.io/myproject/github.com/project/project-1:9246b98256013b49"
digest: "sha256:9a9e3a4fb7072b7"
push_timing {
  start_time {
    seconds: 1660330436
    nanos: 983521156
  }
  end_time {
    seconds: 1660330706
    nanos: 296478248
  }
}"""

if (mo := re.search('name:\s+"(?P<name>.*)"', mystring)):
    print(mo['name'])
else:
    print('Not found')

Output:

gcr.io/myproject/github.com/project/project-1:9246b98256013b49

您还可以使用这些行来分隔更复杂结构中的组:

search_string = r'name: "(.*)"'    
match_string = re.search(r'name: "(.*)"', image_info)

然后返回您的预期组:

image_name = match_string.group(1)

output:

gcr.io/myproject/github.com/project/project-1:9246b98256013b49

请注意,使用group(0)返回整个正则表达式匹配部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM