Как выбрать строку, содержащую «число перед« NULL »» в текстовом файле? - PullRequest
0 голосов
/ 07 мая 2018

Если строка в текстовом файле выглядит следующим образом, например:

7     abcdefgh /vol/abcdefgh    /vol/abcdefgh **1384573 NULL**  0   5651572 Share   2   0   CifsPerm: 0, CifsType: 0, Remark:   0   NFS /vol/abcdefgh   ntap    None

Я бы хотел взять эту строку, так как перед «NULL» стоит число. Как я могу сделать это? Есть ли определенный поиск в текстовом файле, который я могу сделать? Я попробовал обычный «контроль f», но это не дало то, что я хочу.

Я никогда не использовал Regex, но я слышал об этом, поэтому я надеюсь, что это не единственный вариант. Если это так, пожалуйста, сообщите - я использую Python. Спасибо!

Ответы [ 3 ]

0 голосов
/ 07 мая 2018

Это будет работать для вас:

import re

line_in = "abcdefgh /vol/abcdefgh    /vol/abcdefgh **1384573 NULL**  0   5651572 Share   2   0   CifsPerm: 0, CifsType: 0, Remark:   0   NFS /vol/abcdefgh   ntap    None"

output = re.findall (r"(\d+)\s+NULL", line_in )

print (output)

() захватывает то, что в скобках.

"\ d +" находит несколько числовых символов.

"\ s +" находит пробелы.

И "NULL" помещает все это перед текстом NULL.

0 голосов
/ 07 мая 2018

Если вы хотите сопоставить всю строку, вы можете использовать положительный прогноз (?=, чтобы утверждать, что строка содержит одну или несколько цифр \d+, за которыми следуют пробел и NULL.

^(?=.*\d+ NULL).+$

Другим способом сопоставления всей строки может быть сопоставление с начала строки ^ любого символа ноль или более раз .*, затем сопоставление NULL и сопоставление любого символа ноль или более раз до конца линия $.

^.*\d+ NULL.*$

Если вы хотите сопоставить более одного пробела до NULL, вы можете повторить пробел один или несколько раз + или использовать \s+ или \s*, если также не может быть пробелов.

Обратите внимание, что \s соответствует любому пробелу [\r\n\t\f\v ]

Демо Python

0 голосов
/ 07 мая 2018

Использование Regex:

Демо:

import re
s = """7 abcdefgh /vol/abcdefgh /vol/abcdefgh 1384573 NULL 0 5651572 Share 2 0 CifsPerm: 0, CifsType: 0, Remark: 0 NFS /vol/abcdefgh ntap None"""
m = re.search("\d+\s+NULL", s)
if m:
    print(m.group())

Выход:

1384573 NULL

Редактировать согласно комментарию

import re 
with open('inventory.txt', 'r') as s: 
    for i in s.readlines():
        m = re.search("\d+\s+NULL", i) 
        if m: 
            print(m.group())

или

import re
with open('inventory.txt', 'r') as data:
    s = data.read()
    print(re.findall("\d+\s+NULL", s))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...