Извлечение содержимого между двумя определенными словами в python с использованием регулярного выражения - PullRequest
1 голос
/ 12 июля 2020

здесь я пытаюсь извлечь содержимое между pointID и point Name. Как показано на рисунке ниже.

введите описание изображения здесь

        import re
import pandas as pd
import numpy as np

sent1 = 'Date:2020/07/11 13:53  Low Alarm OFF\nAlarm Priority:Urgent\nPoint ID0000294.AI.0017707\nPoint Name:BOM-DC3-B2-2F-Q1-TEMP 3\nAlarm:Normal\nStatus:18.6 øC'
sent2 = 'Date:2020/07/11 13:42  Low AlarmAlarm Priority:UrgentPoint ID0000294.AI.0017707Point Name:BOM-DC3-B2-2F-Q1-TEMP 3Alarm:AbnormalStatus:Analog Lower Limit Alarm 18.0 øC'
def extract_id(sent):
    lst=re.split(r'\W+', sent)
    lst=str(lst[13]) + str(lst[14]) + str(lst[15])
    return(lst)

Здесь с первым sent1 я могу извлечь контент между pointid, но point Name Но с sent2 я не могу этого сделать. Почему, потому что я разбиваю все предложение на список, а затем получаю индекс списка 13/14/15. что не то же самое для sent2. Требуется решение, использующее регулярное выражение, как получить содержимое между Point ID [Требуемое содержимое] Point Name.

1 Ответ

1 голос
/ 12 июля 2020

Вы можете использовать сопоставление необязательного символа новой строки перед сопоставлением Имя точки .

Для требуемой части содержимого вы можете сопоставить хотя бы один символ без пробелов \S после Идентификатор точки .

Point ID(\S.*?)[\r\n]*Point Name\b

Шаблон соответствует

  • Point ID Буквальное совпадение
  • (\S.*?) Захват группа 1 , сопоставить символ без пробелов и любой символ, кроме символа новой строки, не жадный
  • [\r\n]* сопоставить 0+ новых строк
  • Point Name\b сопоставить имя точки с границей слова

Regex demo | Python демо

import re

def extract_id(sent):
    regex = r"Point ID(\S.*?)[\r\n]*Point Name\b"
    return re.findall(regex, sent)

sent1 = 'Date:2020/07/11 13:53  Low Alarm OFF\nAlarm Priority:Urgent\nPoint ID0000294.AI.0017707\nPoint Name:BOM-DC3-B2-2F-Q1-TEMP 3\nAlarm:Normal\nStatus:18.6 øC'
sent2 = 'Date:2020/07/11 13:42  Low AlarmAlarm Priority:UrgentPoint ID0000294.AI.0017707Point Name:BOM-DC3-B2-2F-Q1-TEMP 3Alarm:AbnormalStatus:Analog Lower Limit Alarm 18.0 øC'

print(extract_id(sent1))
print(extract_id(sent2))

Выход

['0000294.AI.0017707']
['0000294.AI.0017707']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...