这是我的bash代码,我将其转换为python:
if [[ "$hostname_from_route53" =~ $host[0-9].$env.$domain ]];
我希望能够将"$hostname_from_route53"
与$host[0-9].$env.$domain
进行比较。
这可能是:
server1.prod.aws.<company>.co.uk =~ $server[0-9].prod.aws.<company>.co.uk
server9.dev.aws.<company>.co.uk =~ $server[0-9].dev.aws.<company>.co.uk
我正在努力将其用于python。我觉得应该包含import re
和某种re.compile
,但我似乎无法找到与上面bash示例相同的内容。
答案 0 :(得分:4)
这样的事情应该让你去
import re
hostname_from_route53 = "server1.prod.aws.<company>.co.uk"
host = "server"
env = "prod"
domain = "aws"
pattern = r'^{host}[0-9]\.{env}\.{domain}'
filled_pattern = pattern.format(host=re.escape(host),
env=re.escape(env),
domain=re.escape(domain))
regex = re.compile(filled_pattern)
if regex.match(hostname_from_route53):
do_stuff()
请注意,server12.dev.aws.<company>.co.uk
等主机名与上述内容不匹配。要匹配9
以上的数字,您应将pattern
更改为以下内容:
pattern = r'^{host}[0-9]+\.{env}\.{domain}'
答案 1 :(得分:1)
我会使用正则表达式:
re.escape(host) + r"[0-9]\." + re.escape(env) + r"\." + re.escape(domain)
例如,您可以说:
import re
host="myhost"
env="dd"
domain="aa"
my_regex = re.escape(host) + r"[0-9]\." + re.escape(env) + r"\." + re.escape(domain)
for var in ["myhost2.dd.aa", "myhost99.dd.aa"]:
if re.search(my_regex, var):
print(var, "matched!")
else:
print(var, "did not match")
执行它会返回:
$ python my_match.py
('myhost2.dd.aa', 'matched!')
('myhost99.dd.aa', 'did not match')
答案 2 :(得分:1)
虽然在这里等待回复,我想我已经破解了它:
if re.search(r"%s[0-9].%s.%s" % (host, env, domain),
hostname_from_route53, re.IGNORECASE):