将字符串与python中的数字0-9匹配

时间:2016-04-20 10:35:17

标签: python regex

这是我的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示例相同的内容。

3 个答案:

答案 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):