从下面的文件中,我只想提取if语句块并对它们进行迭代 还希望仅提取块内具有image:as键的块
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: {{ template "fullname" . }}
labels:
app: {{ template "fullname" . }}
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
release: "{{ .Release.Name }}"
heritage: "{{ .Release.Service }}"
spec:
replicas: {{ .Values.replicas }}
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
minReadySeconds: 5
template:
metadata:
labels:
name: {{ template "fullname" . }}
app: {{ template "fullname" . }}
spec:
{{- if .Values.pvc.enabled }}
volumes:
- name: {{ template "fullname" . }}
persistentVolumeClaim:
claimName: {{ template "claimname" . }}
{{- end }}
{{- if .Values.k8swait.enabled }}
serviceAccountName: {{ template "fullname" . }}-admin
initContainers:
- env:
- name: CLUSTER
value: "{{ .Values.k8swait.parameters.cluster}}"
- name: NAMESPACE
value: "{{ .Release.Namespace }}"
- name: RESOURCE
value: "{{ .Values.k8swait.parameters.resource}}"
- name: RNAME
value: "{{ .Values.k8swait.job.jobname }}"
- name: TIMEOUT
value: "{{ .Values.k8swait.parameters.timeout}}"
- name: FREQUENCE
value: "{{ .Values.k8swait.parameters.frequence}}"
name: {{ .Values.k8swait.parameters.name}}
image: "{{ .Values.global.registry1 }}/{{ .Values.k8swait.repo }}:{{ .Values.k8swait.tag }}"
resources:
limits:
cpu: "{{ .Values.resources.limits.cpu }}"
memory: "{{ .Values.resources.limits.memory }}"
requests:
cpu: "{{ .Values.resources.requests.cpu }}"
memory: "{{ .Values.resources.requests.memory }}"
{{- end }}
securityContext:
runAsUser: 1000
fsGroup: 1000
containers:
- name: {{ template "fullname" . }}
image: "{{ .Values.global.registry }}/{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ default "" .Values.imagePullPolicy | quote }}
ports:
- name: http
containerPort: 9000
{{- if .Values.pvc.enabled }}
image: "{{ .Values.global.registry1 }}/{{ .Values.k8swait.repo }}:{{ .Values.k8swait.tag }}"
volumeMounts:
- mountPath: /BACKUP
name: "{{ template "fullname" . }}"
{{- end }}
期望输出:
{{- if .Values.k8swait.enabled }}
serviceAccountName: {{ template "fullname" . }}-admin
initContainers:
- env:
- name: CLUSTER
value: "{{ .Values.k8swait.parameters.cluster}}"
- name: NAMESPACE
value: "{{ .Release.Namespace }}"
- name: RESOURCE
value: "{{ .Values.k8swait.parameters.resource}}"
- name: RNAME
value: "{{ .Values.k8swait.job.jobname }}"
- name: TIMEOUT
value: "{{ .Values.k8swait.parameters.timeout}}"
- name: FREQUENCE
value: "{{ .Values.k8swait.parameters.frequence}}"
name: {{ .Values.k8swait.parameters.name}}
image: "{{ .Values.global.registry1 }}/{{ .Values.k8swait.repo }}:{{ .Values.k8swait.tag }}"
resources:
limits:
cpu: "{{ .Values.resources.limits.cpu }}"
memory: "{{ .Values.resources.limits.memory }}"
requests:
cpu: "{{ .Values.resources.requests.cpu }}"
memory: "{{ .Values.resources.requests.memory }}"
{{- end }}
{{- if .Values.pvc.enabled }}
image: "{{ .Values.global.registry1 }}/{{ .Values.k8swait.repo }}:{{ .Values.k8swait.tag }}"
volumeMounts:
- mountPath: /BACKUP
name: "{{ template "fullname" . }}"
{{- end }}
我尝试了以下代码,但它不能正常工作
with open(args.dataFileName) as fd:
data = fd.read()
match = re.findall(r'{{-?\s?if .+ end\s?}}', data, re.DOTALL)
正如您所看到的,所需的输出只包含if语句块,该语句块中有image作为键 如何使用regex实现这一点有什么提示吗?你知道吗
正则表达式的一个限制是,只有当
if
块没有嵌套时,它才起作用。另外,我只熟悉Jinja2中用于if块的
{% if %}
和{% endif %}
。所以,我跟随你寻找{{-?\s*if\s*}}
和{{-?\s*end\s*}}
。如果这是不正确的,它很容易补救。你知道吗印刷品:
See demo
即使您有嵌套的if语句,您仍然可以使用Regex执行此操作,并且解析文本文件的速度会很快:
输出:
如果
if statements
的顺序对您很重要,那么我们也可以解决这个问题,只需对如何提取嵌套语句进行注释。如果在嵌套if statements
的情况下,如果外部表达式有image:
单词,并且子表达式也有该单词to,那么在结果中,我提取了两个元素,如果你不想这样做的话,只需放一个注释,我也会修复它。你知道吗我希望这能帮你好运。你知道吗
相关问题 更多 >
编程相关推荐