Что нового

[RegExp] выборка имен принтеров

F9

Новичок
Сообщения
71
Репутация
2
Снова привет.
Продолжаю осваивать RegExp :whistle:

Как из текста (имя принтера) получить только определенные принтеры
например, имеется набор принтеров:
Код:
Имя принтера: Авто EZ2 на ZAKAZ, Имя порта: \\ZAKAZ\EZ2
Имя принтера: Авто BZB на ZAV, Имя порта: \\ZAV\BZB
Имя принтера: Microsoft XPS Document Writer, Имя порта: XPSPort:
Имя принтера: \\KASSA3\HP LaserJet 1022, Имя порта: USB001
Имя принтера: \\ZAKAZ\Zebra LP2824 Plus - ZPL, Имя порта: LPT1:
Имя принтера: \\ZAV\HP LaserJet P2035, Имя порта: USB001

Как мне выбрать только те, имя которых содержит:
BZB, EZ2,EZ-2, Zebra, Zebra LP2824, Zebra2824
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Имя принтера: ([^,]*(?:BZB|EZ2|EZ-2|Zebra|Zebra LP2824|Zebra2824)[^,]*)
 
A

Alofa

Гость
Код:
#include <Array.au3>
$sText = 'Имя принтера: Авто EZ2 на ZAKAZ, Имя порта: \\ZAKAZ\EZ2' & @CRLF & _
		'Имя принтера: Авто BZB на ZAV, Имя порта: \\ZAV\BZB' & @CRLF & _
		'Имя принтера: Microsoft XPS Document Writer, Имя порта: XPSPort:' & @CRLF & _
		'Имя принтера: \\KASSA3\HP LaserJet 1022, Имя порта: USB001' & @CRLF & _
		'Имя принтера: \\ZAKAZ\Zebra LP2824 Plus - ZPL, Имя порта: LPT1:' & @CRLF & _
		'Имя принтера: \\ZAV\HP LaserJet P2035, Имя порта: USB001' & @CRLF & _ 
		'Имя принтера: LaLaLa\EZ-2 Plus, Имя порта: USB001'
		
$asText = StringRegExp($sText, '.+?(?:BZB|EZ2|EZ-2|Zebra).+', 3)
_ArrayDisplay($asText, 'Вариант 1')


F9 сказал(а):
... имя которых содержит:
BZB, EZ2,EZ-2, Zebra, Zebra LP2824, Zebra2824
Имена "Zebra LP2824" и "Zebra2824" не учитываются в поиске, потому что содержат общее слово "Zebra".
 
Автор
F9

F9

Новичок
Сообщения
71
Репутация
2
Alofa сказал(а):
Код:
#include <Array.au3>
$sText = 'Имя принтера: Авто EZ2 на ZAKAZ, Имя порта: \\ZAKAZ\EZ2' & @CRLF & _
		'Имя принтера: Авто BZB на ZAV, Имя порта: \\ZAV\BZB' & @CRLF & _
		'Имя принтера: Microsoft XPS Document Writer, Имя порта: XPSPort:' & @CRLF & _
		'Имя принтера: \\KASSA3\HP LaserJet 1022, Имя порта: USB001' & @CRLF & _
		'Имя принтера: \\ZAKAZ\Zebra LP2824 Plus - ZPL, Имя порта: LPT1:' & @CRLF & _
		'Имя принтера: \\ZAV\HP LaserJet P2035, Имя порта: USB001' & @CRLF & _ 
		'Имя принтера: LaLaLa\EZ-2 Plus, Имя порта: USB001'
		
$asText = StringRegExp($sText, '.+?(?:BZB|EZ2|EZ-2|Zebra).+', 3)
_ArrayDisplay($asText, 'Вариант 1')


F9 сказал(а):
... имя которых содержит:
BZB, EZ2,EZ-2, Zebra, Zebra LP2824, Zebra2824
Имена "Zebra LP2824" и "Zebra2824" не учитываются в поиске, потому что содержат общее слово "Zebra".


вывод инфы был в таком виде:

Код:
$strComputer = "."
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Printer")
For $objItem in $colItems
	ConsoleWrite ( "Имя принтера: " & $objItem.Caption & ", Имя порта: " & $objItem.PortName & @CRLF)
Next


Наверно поэтому паттерн
Код:
'.+?(?:BZB|EZ2|EZ-2|Zebra).+'
не выбирает из объекта $objItem.Caption, который содержит
Код:
Microsoft XPS Document Writer
HP LaserJet 5200 Series PCL 5
BZB
 
A

Alofa

Гость
F9, какой вопрос - такой ответ.
А в вашем случае, вообще лучше делать не так.
 
Автор
F9

F9

Новичок
Сообщения
71
Репутация
2
Alofa сказал(а):
F9, какой вопрос - такой ответ.
А в вашем случае, вообще лучше делать не так.
А что не так в моем случае? Поясните, пожалуйста, что имели ввиду
 
Верх