Python: сопоставить специальный символ с регулярным выражением - PullRequest
0 голосов
/ 08 марта 2020

Привет всем Я использую функцию re.match для извлечения фрагментов строки в строке из файла.

Мой код выглядит следующим образом:

## fp_tmp => pointer of file

for x in fp_tmp:
        try:
            cpuOverall=re.match(r"(Overall CPU load average)\s+(\S+)(%)",x)
            cpuUsed=re.match(r"(Total)\s+(\d+)(%)",x)
            ramUsed=re.match(r"(RAM Utilization)\s+(\d+\%)",x)

            ####Not Work####
            if cpuUsed is not None: cpuused_new=cpuUsed.group(2)
            if ramUsed is not None: ramused_new=ramUsed.group(2)
            if cpuOverall is not None: cpuoverall_new=cpuOverall.group(2)
        except:
            searchbox_result = None

Каждое поле извлечено из следующей соответствующей строки:

ramUsed => RAM Utilization 2%
cpuUsed => Total 4%
cpuOverall => Overall CPU load average 12%

ramUsed, cpuUsed, cpuOvera - это переменная, в которую я хочу записать результат !! Правильная строка:

(space undefined) RAM Utilization 2%
(space undefined) Total 4%
(space undefined) Overall CPU load average 12%

Когда я выполняю скрипт, все переменные возвращают значение: Нет. С другой переменной скрипт работает корректно.

Почему код не работает в этом случае? Я использую python3

Я думаю, что проблема заключается в% символов, которые не читаются.

Есть ли у вас какие-либо предложения?

ПРОБЛЕМА 2:

## fp_tmp => pointer of file

for x in fp_tmp:
        try:
            emailReceived=re.match(r".*(Messages Received)\s+\S+\s+\S+\s+(\S+)",x)

            ####Not Work####
            if emailReceived is not None: emailreceived_new=emailReceived.group(2)

        except:
            searchbox_result = None

Каждое поле извлекается из следующих, соответствующих двум строкам в файле:

[....]
Counters:                               Reset          Uptime        Lifetime
  Receiving
    Messages Received                   3,406           1,558           3,406
[....]
Rates (Events Per Hour):             1-Minute       5-Minutes      15-Minutes
  Receiving
    Messages Received                       0               0               0
    Recipients Received                     0               0               0
[....]

Я хочу извлечь только в секунду, что:

Rates (Events Per Hour):             1-Minute       5-Minutes      15-Minutes
  Receiving
    Messages Received                       0               0               0 <-this

У вас есть предложения?

1 Ответ

0 голосов
/ 08 марта 2020

cpuOverall строка: вы забыли, что в начале строки больше информации. Измените на строку

'.*(Overall CPU load average)\s+(\S+%)'

cpuUsed: вы забыли, что в начале строки есть дополнительная информация. Измените на

'.*(Total)\s+(\d+%)'

ramUsed строку: вы забыли, что в начале строки есть дополнительная информация ... Измените на

'.*(RAM Utilization)\s+(\d+%)'

Помните, что re.match ищет точное совпадение с начала :

Если ноль или более символов в начале из string соответствуют регулярному выражению шаблон, вернуть соответствующий объект сопоставления. [..]

С этими изменениями ваши три переменные установлены в процентах:

>>> print (cpuused_new,ramused_new,cpuoverall_new)
4% 2% 12%
...