Что нового

[RegExp] Форматирование строки с добавлением и заменой

RAMzor

Новичок
Сообщения
15
Репутация
0
Доброе время суток ув. знатоки!
Я абсолютный дуб в регулярных выражениях сколько не читаю и не пробую... - такое впечатление что китайский проще выучить :stars:

Есть строка A0:4, a1:5, A0:2, b0:3, A1:0, A1:1, B1:2, B1:3, A1:7, A1:11, A1:15

В конечном, идеальном, результате надо получить массив из частей разделённых запятой добавляя ' -s ' и заменяя ':' на ' -m '.
Так чтобы каждый элемент имел такой вид ' -s А0 -m 4 ', след. элемент ' -s А1 -m 5 ' и т.д.
(регистр не важен)

Для чего? - Это подготовка командной строки для запуска консольного приложения с разными параметрами в цикле.

В принципе я это решил так:
Код:
Local $MuxSelRule =  StringStripWS("A0:4, a1:5, A0:2, b0:3, A1:0, A1:1, B1:2, B1:3, A1:7, A1:11, A1:15", 8)
	; Build Source and Mux selection string e.g. -s A0 -m 0
	$MuxSelRule = StringReplace($MuxSelRule, ":", " -m ")
	Local $aMuxSelect = StringSplit($MuxSelRule, ",")
	For $i = 1 To $aMuxSelect[0]
		$aMuxSelect[$i] = " -s " & $aMuxSelect[$i] & " "
	Next


Но мне не даёт покоя мысль что с помощью регулярных выражений это получится красивей / грамотней... И возможно ли такое в один проход? :scratch:

Заранее благодарен!
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
RAMzor,
Можно так попробовать.
Код:
#include <Array.au3>

$sStr = 'A0:4, a1:5, A0:2, b0:3, A1:0, A1:1, B1:2, B1:3, A1:7, A1:11, A1:15'

$aRes = StringSplit(StringRegExpReplace($sStr, '(?i)([a-z]+\d+):(\d+)', ' -s $1 -m $2'), ', ', 1)
_ArrayDisplay($aRes)

$aRes1 = StringSplit(StringRegExpReplace(StringUpper($sStr), '([A-Z]+\d+):(\d+)', ' -s $1 -m $2'), ', ', 3)
_ArrayDisplay($aRes1)
 
Автор
RAMzor

RAMzor

Новичок
Сообщения
15
Репутация
0
Большое спасибо!

Пол дня экспериментировал, хотел сам одолеть... Пока нервы не сдали :shooting2:
 
Верх