Автор Тема: StringRegExp. Как поймать первое совпадение?  (Прочитано 3063 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Suppir [?]

  • Продвинутый
  • ***
  • Сообщений: 967
  • Репутация: 61
    • Награды
Текст имеет вид (это одна строка, разбитая @CRLF)

"а = 111
b : 222
с -  333"

при этом положение а, b и с может быть любым. Например:

"b : 222
с -  333
а = 111"

Мне необходимо поймать цифровой атрибут самой верхней из букв.

Я пишу:

StringRegExp($Text, "a = (\d+)|c - (\d+)|a = (\d+)", 1)

По идее это регулярное выражение должно поймать любую из строк: а, б или с. Каким образом получить переменную, содержающую атрибут первой (верхней) из строк?




Добавлено: Январь 18, 2010, 14:07:12
Решис с помощью следующего кода:

Код: AutoIt [Выделить]
$Matches = StringRegExp(WinGetText(""), "а = (\d+)|b : (\d+)|c - (\d+)", 1)
    For $x = 0 to UBound($Matches)-1
        If $Matches[$x] <> "" Then
            $Topic = $Matches[$x]  
            ExitLoop
        EndIf
    Next
EndIf
 

« Последнее редактирование: Январь 18, 2010, 14:09:03 от Suppir, Причина: Объединение сообщений »

Русское сообщество AutoIt

StringRegExp. Как поймать первое совпадение?
« Отправлен: Январь 18, 2010, 13:26:39 »

Оффлайн gregaz [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1166
  • Репутация: 298
  • Пол: Мужской
    • Награды
Re: StringRegExp. Как поймать первое совпадение?
« Ответ #1, Отправлен: Январь 18, 2010, 14:58:20 »
А если так ?
Код: AutoIt [Выделить]
$sStr1="а = 111" & @CRLF & "b : 222" & @CRLF & "с -  333"
$sStr2="b : 222" & @CRLF & "с -  333" & @CRLF & "а = 111"
$sPattern='(?s)^\D+(\d+)\r.*$'
$sResult1 =StringRegExpReplace($sStr1,$sPattern ,'\1')
ConsoleWrite($sResult1 & @CRLF)
$sResult2 =StringRegExpReplace($sStr2,$sPattern,'\1')
ConsoleWrite($sResult2 & @CRLF)
 

Самая большая проблема – её сформулировать. 

Оффлайн Suppir [?]

  • Продвинутый
  • ***
  • Сообщений: 967

  • Автор темы
  • Репутация: 61
    • Награды
Re: StringRegExp. Как поймать первое совпадение?
« Ответ #2, Отправлен: Январь 18, 2010, 15:02:58 »
Наверное, так тоже заработает. Т.е. мы присваиваем переменной значение из первого совпадения. Правда, в реальной задаче гораздо более сложные паттерны, я упрощенно записал, для примера.
« Последнее редактирование: Январь 18, 2010, 15:21:47 от Suppir »

Русское сообщество AutoIt

Re: StringRegExp. Как поймать первое совпадение?
« Ответ #2 Отправлен: Январь 18, 2010, 15:02:58 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
0 Ответов
2376 Просмотров
Последний ответ Апрель 02, 2011, 02:20:12
от CreatoR
11 Ответов
4426 Просмотров
Последний ответ Август 28, 2011, 17:38:40
от Вова великолепный
0 Ответов
1457 Просмотров
Последний ответ Ноябрь 19, 2012, 21:19:10
от beerdy
15 Ответов
5123 Просмотров
Последний ответ Январь 28, 2013, 14:55:05
от madmasles
3 Ответов
3017 Просмотров
Последний ответ Март 20, 2013, 14:14:52
от BIOS
4 Ответов
2294 Просмотров
Последний ответ Ноябрь 06, 2013, 19:48:36
от Suppir
3 Ответов
1994 Просмотров
Последний ответ Декабрь 06, 2013, 17:22:32
от Zhavner
2 Ответов
1668 Просмотров
Последний ответ Май 06, 2015, 21:25:08
от Tapok
16 Ответов
2150 Просмотров
Последний ответ Сентябрь 23, 2016, 10:28:02
от Garrett
4 Ответов
2500 Просмотров
Последний ответ Декабрь 05, 2017, 23:32:26
от Се-рё-жа