正则表达式不适用于if语句

时间:2016-09-02 01:33:59

标签: python regex python-2.7

我正在使用以下正则表达式从文件中提取多个信息。

{{1}}

以下是“inventory.log”文件的内容。

{{1}}

当我调用该函数时,它不会显示 final_sn 的结果。我尝试重新排序if语句,并且发现它仅适用于 if 和第一个 elif 语句。我错过了我的代码吗?

2 个答案:

答案 0 :(得分:0)

如果您同时拥有PIDSN,那么您最终只会运行第一个elif语句。

试试这个:

def inventory():
with open('inventory.log', 'r+') as f:
    match_hostname = re.compile(r'NAME: "(.+)",')
    match_pid = re.compile(r'PID: (.+) ,')
    match_sn = re.compile(r'SN: (.+)')
    list_text = [text.strip() for text in f]
    for line in list_text:
        match_regex_hostname = match_hostname.search(line)
        match_regex_pid = match_pid.search(line)
        match_regex_sn = match_sn.search(line)
        if match_regex_hostname:
            final_hostname = match_regex_hostname.group(1).strip(" ")
            print final_hostname
        if match_regex_pid:
            final_pid = match_regex_pid.group(1).strip(" ")
            print final_pid
        if match_regex_sn:
            final_sn = match_regex_sn.group(1).strip(" ")
            print final_sn
inventory()

答案 1 :(得分:0)

看起来“inventory.log”是一个csv文件,这意味着你可以使用csv模块来完美地完成这项任务。

def inventory(filename):
    with open(filename) as f:
        reader = csv.reader(f)
        for row in reader:
            print([item.strip()
                   for item in row if item.strip().lower().startswith(('name', 'pid', 'sn'))])

演示:

>>> import csv
>>> import io
>>> text = """NAME: "LAB-SW01", DESCR: "My Switch"
... PID: AS-2001-XT   , VID: N/A, SN: ABA0923K0DN"""

>>> with io.StringIO(text) as f:
...     reader = csv.reader(f)
...     for row in reader:
...         print([item.strip() for item in row if item.strip().lower().startswith(('name', 'pid', 'sn'))])
... 
['NAME: "LAB-SW01"']
['PID: AS-2001-XT', 'SN: ABA0923K0DN']