我正在尝试从字符串中提取数字。
例如,如果我有字符串'host2',我只希望返回'2'。如果字符串中没有数字,我希望返回“ 1”。
一些示例:
host1 -> 1
ho12st -> 12
host -> 1
host2 -> 2
host2test -> 2
host02 -> 02
host34 -> 34
我不知道是否应该为此使用模块,还是使用内部工作原理并设置一个事实。我有点新手。
类似于以下的内容在python中有效,但不可行。
int(''.join(filter(str.isdigit, {{ ansible_hostname }} )))
这最终在shell上解释,所以我不能使用{{ansible_hostname}}变量。如果没有找到数字,它也不默认为“ 1”。
****回答****
我最终使用它来获得所需的结果:
- set_fact:
env_id: '{{ server_name | regex_search(qry) }}'
vars:
qry: '[0-9]'
- set_fact:
env_id: "1"
when: env_id == ""
答案 0 :(得分:0)
如果您想使用正则表达式执行此任务,我想我们将只能得到带有数字的数字,并使用简单的表达式,例如:
([0-9]+)
然后您可以简单地添加一个if
,对于没有数字的人返回1
。
# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility
import re
regex = r"([0-9]+)"
test_str = ("host1\n"
"ho12st\n"
"host\n"
"host2\n"
"host2test\n"
"host02\n"
"host34")
matches = re.finditer(regex, test_str, re.MULTILINE)
for matchNum, match in enumerate(matches, start=1):
print ("Match {matchNum} was found at {start}-{end}: {match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group()))
for groupNum in range(0, len(match.groups())):
groupNum = groupNum + 1
print ("Group {groupNum} found at {start}-{end}: {group}".format(groupNum = groupNum, start = match.start(groupNum), end = match.end(groupNum), group = match.group(groupNum)))
# Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution.