Что нового

[RegExp] Убрать из строки лишнее

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
sngr [?]
Что ты мне пытаешься доказать? Что мой пример неуневрсален?
Я всего лишь указал на ошибку, причём грубую в рег. выражениях. Пример не то что не универсален, он не в корне неправильный.

Почему ты так отреагировал, мне тоже стало странным.
 
Автор
П

Пытливый

Новичок
Сообщения
8
Репутация
0
Дико извиняюсь :smile:
С самим выражение стало яснее, но вот с
Но почему-то все три вывода на консоль (после выбора строки, отбрасывания начала и отбрасывания конца) выдают одинаковый результат. Вот это то мне и не понятно.
непонятки остались.
 

sngr

AutoIT Гуру
Сообщения
1,011
Репутация
409
У нас есть слово из 5 русских букв (\W{5}), которое надо найти. Мой пример отрабатывет штатно и находит то что надо. Ты предлагаешь свой пример (\S+) и (\W+), который находит также, и указываешь мне , что мой пример не сработает с другим количеством букв(это грубая ошибка?), на что я тебо говорю, что твой пример найдет искомое слово с другим количеством букв, но также спасует, если между > и & будут англ буквы, цифры, пробелы или их сочетание и поэтому невижу особой разницы между моим и твоим примерами, поэтому мне странен твой упрёк. На этом предлагаю закончить и не флудить дальше.



Добавлено:
Сообщение автоматически объединено:

Пытливый, поконкретней.
 
Автор
П

Пытливый

Новичок
Сообщения
8
Репутация
0
я считал, что после строки
Код:
$sName1 = StringRegExp($sHTMLMAP, 'Нападение"></td><td align=center><b> +(.+?)<', 3)


в элементе массива $sName1[0] будет содержаться строка
Код:
Нападение"></td><td align=center><b> (две или одна цифра)<


и так как совпадение одно, то других элементов массива не будет. Но по команде ConsoleWrite($sName1[0]&@CRLF) в консоли выводиться только число. Я не правильно понимаю как работает команда?
 

sngr

AutoIT Гуру
Сообщения
1,011
Репутация
409
Как я понимаю, тебе нужно получить скажем нападение и его значение(цифру).
Код:
title="Нападение"></td><td align=center><b> +23</b></td></tr><tr>
Вот нападение, а +23 это его значение, зачем тебе строка? Хочешь найти защиту, пишешь title="защита" и получаешь его цифровое значение. Или я тебя не так понимаю? В $sName1 будет содержаться массив значений, а $sName1[0] выдаст первое из них.
Или можно так сделать:
Код:
$w='Защита'
$a=FileRead(@ScriptDir& '\out.txt')
$q=StringRegExp($a,'(?s)title="'&$w&'">.*? (\S{1,})</b>',1)
ConsoleWrite($w&'='&$q[0]&@CRLF)
 

madmasles

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

Dim $aResult[7][2] = [[6],['Нападение'],['Защита'],['Знания'],['Удача'],['Боевой дух'],['Инициатива']]

$sText = FileRead(@ScriptDir & '\out.txt');можно читать напрямую с сайта и не создавать временного файла
For $i = 1 To $aResult[0][0]
	$aResult[$i][1] = StringReplace(StringRegExpReplace($sText, '(?s).*' & $aResult[$i][0] & '.*?<b>(.*?)</b>.*', '$1'), ' ', '')
Next
_ArrayDisplay($aResult)
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
А может так :?
Код:
$sTitlesString="Нападение|Защита|Знания|Удача|Боевой дух|Инициатива"
$sPatern = '(?s)title="(' & $sTitlesString & ')">.*? (\S{1,})</b>'
$aResult = StringRegExp( $sText, $sPatern, 3 )

или :
Код:
$sPatern = '(?s)title="(' & $sTitlesString & ')">.*? ([^<]+?)</b>'
 
Автор
П

Пытливый

Новичок
Сообщения
8
Репутация
0
Всем спасибо. Вечером разберу все варианты. Уровень, к сожалению, таков, что для понимания все приходиться пробовать и разбирать.
 
Верх