c# - 用于从 Kubernetes Pod 名称解析部署或作业名称的正则表达式

标签 c# regex

我正在尝试解析 Kubernetes Pod 名称以进行日志记录。

我的 Pod 名称总是这样

<deployment>-<replicaset>-<uid>
<job>-<uid> <-- if created by a job

这是一些示例

events-worker-7c9b7bdc55-f7sgc
notification-585f6b94b8-t4jjc
report-generator-749ccf648d-gd9j7
static-content-8445d7f556-wbxvp
init-database-fm44h <-- if created by a job

我想要得到的是部分。 对于上面的示例,这将是

events-worker
notification
report-generator
static-content
init-database

我从这样的事情开始

(?<role_name>.*)(?:-[a-z0-9]{8,10})(?:-[a-z0-9]+)

并以此结束

(?:(?<role_name>[a-z0-9]+(?:-[a-z0-9]+)*))-(?<=-)[a-z0-9]+-(?:(?<=-)[a-z0-9]+)

但是我无法匹配这两种情况(当名称有副本集和没有副本集时)

它要么根本不匹配init-database-fm44h,要么只捕获init而不是init-database

任何帮助将不胜感激

最佳答案

你可以使用

\b(?<!-)(?<role_name>[a-z0-9]+(?:-[a-z0-9]+)*?)(?:-([a-f0-9]{10}))?-([a-z0-9]+)\b(?!-)

请参阅regex demo .

详细信息:

  • \b(?<!-) - 不紧接 - 的字边界
  • (?<role_name>[a-z0-9]+(?:-[a-z0-9]+)*?) - ID 为 1 的“role_name”组:一个或多个字母或数字,然后是零个或多个 - 序列以及尽可能少出现的一个或多个字母/数字
  • (?:-([a-f0-9]{10}))? - 可选的非捕获组匹配 -然后将 10 个十六进制字符捕获到第 2 组中
  • - - 连字符
  • ([a-z0-9]+) - 第 3 组:一个或多个字母或数字
  • \b(?!-) - 后面不紧接着 - 的字边界.

关于c# - 用于从 Kubernetes Pod 名称解析部署或作业名称的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74343761/

相关文章:

JavaScript 正则表达式不匹配 <a> 标签

c# - 使用FileHelperAsyncEngine崩溃无一异常(exception)

c# - 在没有 setter 的情况下通知属性更改事件

c# - 如何在 C# 中用正则表达式替换模式

c# - 从解析的字符串构建多级数组数组/锯齿状数组

r - R grep:是否有AND运算符?

c# - 将特定路由与 Url.Action 结合使用

c# - Enum.IsDefined 带有标记的枚举

javascript - ASP.NET Identity - 使用具有 JavaScript 功能的角色

regex - HTML5 模式排除词