Что нового

[RegExp] Извлечение данных из строки

sforce5

Олл фо ЛулзЪ
Сообщения
160
Репутация
41
Здрасьте!

Существует выражение: {lnglst:Russian|English|Ukrainian}

нужно получить массив этих самых ln-глистов lnglist'ов

Например массив $aLanguage:

$aLanguage[0] - кол-во этих самых
$aLanguage[1] - первый язык (в данном случае Russian)
$aLanguage[2] - English
$aLanguage[3] - Ukrainian
$aLanguage[9000]

Помогите!)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
sforce5
У меня так поучилось:
Код:
#include <Array.au3>

$sString = '{lnglst:Russian|English|Ukrainian}'
$aTemp = StringRegExp($sString, ':(.*?)}', 3)
If IsArray($aTemp) Then
	$aLanguage = StringSplit($aTemp[0], '|')
	_ArrayDisplay($aLanguage, '$aLanguage')
EndIf
 

SyDr

Сидра
Сообщения
651
Репутация
158
А зачем здесь регулярные выражения?

Код:
$sList = '{lnglst:Russian|English|Ukrainian}'
$sList = StringTrimLeft($sList, 8)
$sList = StringTrimRight($sList, 1)
$aList = StringSplit($sList, "|")
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
Без регулярных выражений у меня еще так получилось:
Код:
#include <Array.au3>

$sString = '{lnglst:Russian|English|Ukrainian}'
$aLanguage = StringSplit(StringMid($sString, StringInStr($sString, ':') + 1, StringInStr($sString, '}') - StringInStr($sString, ':') - 1), '|')
_ArrayDisplay($aLanguage, '$aLanguage')
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
Я не проверял, но думаю StringSplit(), одна из самых быстрых функций обработки строк в AutoIt. Так что предпочтительнее использовать ее.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 472
Репутация
2 401
А вот так это делается одним выражением:

Код:
#include <Array.au3>

$sString = '{lnglst:Russian|English|Ukrainian}'
$aLanguage = StringRegExp($sString, '(?:{lnglst:)?(.*?)(?:\||})', 3)
_ArrayDisplay($aLanguage, '$aLanguage')


правда это занимает нулевой элемент.

А со StringSplit я бы сделал так:

Код:
$sString = '{lnglst:Russian|English|Ukrainian}'
$aLanguage = StringSplit(StringMid($sString, 9, StringLen($sString)-9), '|')


или можно ещё так поизвращаться:

Код:
$sString = '{lnglst:Russian|English|Ukrainian}'
$aLanguage = StringSplit($sString, '|:}', 2)
$aLanguage[0] = UBound($aLanguage)-2
ReDim $aLanguage[$aLanguage[0]+1]


;D
 

DOZOMIGAMIUS

Новичок
Сообщения
17
Репутация
0
А в Экселе при помощи CЧЁТЕСЛИ() не пробывал?

Столбец А$ - эти данные

Ячейка Б1=Счётесли(A:A;"ИСКОМОЕ ЗНАЧЕНИЕ") ячейка будет равнятся количеству искомых критериев
 
Автор
sforce5

sforce5

Олл фо ЛулзЪ
Сообщения
160
Репутация
41
DOZOMIGAMIUS сказал(а):
А в Экселе при помощи CЧЁТЕСЛИ() не пробывал?
Ох, как жэ я забылЪ про быдлоэксэль. Возможно я не подумал про эксэль потому что здесь он протсо неуместен!

Было бы написано "[ЭКЗЭЛЪ] Излечение данных из ичейки строки"
 
Верх