Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 16, 2017 10:05:59

SergeyChmutov
Зарегистрирован: 2017-08-04
Сообщения: 50
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярные выражения в строках

Добрый день.
Есть список OPC-тегов в формате .csv, который имеет следующий вид (жирным выделил то, что надо вычленить):

NPS_GRY.SW_9.UControl
NPS_GRY.SW_121M.AlarmStop
NPS_SYN.MNA_2.SW_IN.ToClose
NPS_TAE.SW_7_3.ToClose


Надо вычленить полный тег SW_*, от точки до точки, именно то, что выделено жирным. После SW обязательно идет “_”, а вот дальше бывает много разных вариантов. Подскажите как это можно сделать. Пробовал сам, но в регулярках недостаточно силен. Получалось вычленить либо “SW_” либо SW и все что после него.
Заранее спасибо.

Офлайн

#2 Авг. 16, 2017 10:19:49

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Регулярные выражения в строках

 john_16@Linux-home ~ $ python3
Python 3.5.2 (default, Nov 17 2016, 17:05:23) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> ss = '''NPS_GRY.SW_9.UControl
... NPS_GRY.SW_121M.AlarmStop
... NPS_SYN.MNA_2.SW_IN.ToClose
... NPS_TAE.SW_7_3.ToClose'''
>>> 
>>> import re
>>> re.findall('(SW_.*?)\.', ss)
['SW_9', 'SW_121M', 'SW_IN', 'SW_7_3']
>>> 
>>> for s in ss.splitlines():
...     print(re.findall('(SW_.*?)\.', s)[0])
... 
SW_9
SW_121M
SW_IN
SW_7_3
>>> 



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Авг. 16, 2017 10:37:52

SergeyChmutov
Зарегистрирован: 2017-08-04
Сообщения: 50
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярные выражения в строках

JOHN_16
Огромное спасибо.

Офлайн

#4 Авг. 17, 2017 09:05:07

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10010
Репутация: +  857  -
Профиль   Отправить e-mail  

Регулярные выражения в строках

  
>>> import re
>>> 
>>> text = """\
... NPS_GRY.SW_9.UControl
... NPS_GRY.SW_121M.AlarmStop
... NPS_SYN.MNA_2.SW_IN.ToClose
... NPS_TAE.SW_7_3.ToClose
... """
>>> 
>>> out = re.findall(r'SW_[^.]+', text)
>>> out
['SW_9', 'SW_121M', 'SW_IN', 'SW_7_3']
>>>



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version