我正在尝试解析 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/