我正在尝试将使用regex解析的字符串转换为一个数字,以便使用Jinja2对其进行乘法运算。此文件是要在ansible脚本中使用的模板。
我有一系列的items
,它们都是<word><number>
的形式,比如aaa01
,aaa141
,bbb05
。
其思想是解析单词和数字(忽略前导零)并在稍后的模板中使用它们。
我想通过乘法来操作这个数字并使用它。以下是我到目前为止所做的 ```
{% macro get_host_number() -%}
{{ item | regex_replace('^\D*[0]?(\d*)$', '\\1') }}
{%- endmacro %}
{% macro get_host_name() -%}
{{ item | regex_replace('^(\D*)\d*$', '\\1') }}
{%- endmacro %}
{% macro get_host_range(name, number) -%}
{% if name=='aaa' %}
{{ ((number*5)+100) | int | abs }}
{% elif name=='bbb' %}
{{ ((number*5)+200) | int | abs }}
{% else %}
{{ ((number*5)+300) | int | abs }}
{% endif %}
{%- endmacro %}
{% set number = get_host_number() %}
{% set name = get_host_name() %}
{% set value = get_host_range(name, number) %}
Name: {{ name }}
Number: {{ number }}
Type: {{ value }}
使用上面的模板,我得到了一个错误coercing to Unicode: need string or buffer, int found
,我认为它告诉我不能将字符串转换为整数,但是我不明白为什么。我见过这样做和工作的例子。
在正则表达式编号之后,需要将字符串强制转换为int:
然后就不需要在
| int
内部get_host_range
宏中。相关问题 更多 >
编程相关推荐