Что нового

Автоматизация Регулярные выражения. Деление строки по разделителю с условием совпадения начала строки

pvnn

Осваивающий
Сообщения
288
Репутация
31
Есть строка с разделителем '|'
Если начало поисковой строки совпадает с текстом между разделителями, то необходимо добавить текст в массив

Код:
#include <Array.au3>
$Text="Волгоград|Вологда|Воронеж|Москва|Воркута"
$Str="Во"
$aArray = StringRegExp('|' & $Text & '|', '(?i)\|(' & StringRegExpReplace($Str, '([^А-яЁё\w\s])', '\\$1') & '[^|]*?)\|', 3)
_ArrayDisplay($aArray)

;~ Вывод:
;~ Волгоград
;~ Воронеж
;~ Воркута

;~ Нет: Вологда, как исправить регулярку?
 
Решение
Код:
$aArray = StringRegExp('|' & $Text, '(?i)\|(' & $Str & '[^|\v]+)', 3)

Для названий городов это конечно все будет актуально, но если в $Str могут быть применены некоторые спецсимволы, то их нужно будет экранировать.

sngr

AutoIT Гуру
Сообщения
988
Репутация
393
Код:
#include 'array.au3'
$Text="|Волгоград|Вологда|Воронеж|Москва|Воркута|"
$Str="Во"
$aArray = StringRegExp( $Text ,'\|('&$Str&'[^|]+)', 3)
_ArrayDisplay($aArray)
 
Автор
P

pvnn

Осваивающий
Сообщения
288
Репутация
31
А можно сделать, без учета регистра букв
Код:
$Str="во" ; так не работает
 

IMStrelcov

CTPEJIbLLOB
Сообщения
205
Репутация
40
А можно сделать, без учета регистра букв
В начале регулярного выражения добавь - (?i)
что будет значить - не учитывать регистр символов.
Код:
$aArray = StringRegExp( $Text ,'(?i)\|('&$Str&'[^|]+)', 3)

 
  • Like
Реакции: pvnn
Автор
P

pvnn

Осваивающий
Сообщения
288
Репутация
31
Не все так просто, у меня нет '|' перед Волгоград и условие было именно такое, а не как написал sngr
Код:
$Text="Волгоград|Вологда|Воронеж|Москва|Воркута"



Код:
$aArray = StringRegExp( $Text ,'(?i)\|('&$Str&'[^|]+)', 3)
;~ Волгоград  ; нет в массиве
;~ Вологда
;~ Воронеж
;~ Воркута
 

sngr

AutoIT Гуру
Сообщения
988
Репутация
393
Код:
#include 'array.au3'
$Text="Волгоград|Вологда|Воронеж|Москва|Воркута"
$Str="Во"
$aArray = StringRegExp( $Text ,'(?i)(?:\|)?('&$Str&'[^|]+)', 3)
_ArrayDisplay($aArray)
Exit
 
Автор
P

pvnn

Осваивающий
Сообщения
288
Репутация
31
С одной буквой криво работает

Код:
;~ Если
$Str="в"
;~ Волгоград
;~ Вологда
;~ Воронеж
;~ ва        ; это лишнее, не должно быть
;~ Воркута

;~ Если
$Str="во"
;~ Волгоград
;~ Вологда
;~ Воронеж
;~ Воркута

;~ Если
$Str="вор"
;~ Воронеж
;~ Воркута
 

xXx

╚{■_■}╗
Меценат
Сообщения
241
Репутация
91
Код:
$aArray = StringRegExp('|' & $Text, '(?i)\|(' & $Str & '[^|\v]+)', 3)

Для названий городов это конечно все будет актуально, но если в $Str могут быть применены некоторые спецсимволы, то их нужно будет экранировать.
 
Последнее редактирование:
Решение

Andrey_A

Осваивающий
Сообщения
157
Репутация
30
Код:
#include <Array.au3>
$sText="Волгоград|Вологда|Воронеж|Москва|Воркута"
$Str='Во'
$aArray=StringRegExp($sText,'(*UCP)(?i)\b'&$Str&'\w+\b',3) ; поиск по первой букве/ам в слове
_ArrayDisplay($aArray,"Массив $aArray")
$Str='а'
$aArray=StringRegExp($sText,'(*UCP)(?i)\b\w+'&$Str&'\b',3) ; поиск по последней букве/ам в слове
_ArrayDisplay($aArray,"Массив $aArray")
$Str='д'
$aArray=StringRegExp($sText,'(*UCP)(?i)\b\w*'&$Str&'\w*\b',3) ; поиск по букве/ам в любом месте слова
_ArrayDisplay($aArray,"Массив $aArray")
 
Последнее редактирование:

liond66

Новичок
Сообщения
113
Репутация
2
Последний пример от @Andrey_A
Второй поиск на "а" : не показывает первое слово "Волгоград".
Его нужно удалить из примера.
Третий поиск справляется с этим.
 

Andrey_A

Осваивающий
Сообщения
157
Репутация
30
Второй поиск на "а" : не показывает первое слово "Волгоград".
Так он и не должен показывать - во 2-м примере ищутся только последние заданные буквы (букву)
В данном случае где последняя буква 'а', те города и выдаёт
 
Верх