Что нового

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

Пытливый

Новичок
Сообщения
8
Репутация
0
Пример http://autoit-script.ru/index.php/topic,7569.0.html читал, но все равно что-то не получается.

Что указываю не так?




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

Код:
; клан есть
			$sHTMLMAP = FileRead(@ScriptDir & '\out.txt')
			$sName1 = StringRegExp($sHTMLMAP, '"" align=absmiddle>(.+?)&', 3)
			ConsoleWrite($sName1[0])
			$sName1[0] = StringRegExpReplace($sName1[0], '"" align=absmiddle>', '')
			ConsoleWrite($sName1[0])
			$sName1[0] = StringRegExpReplace($sName1[0], "&", '')
			ConsoleWrite($sName1[0])
			$sName1=$sName1[0] ; переменная содержит имя игрока
 
Автор
П

Пытливый

Новичок
Сообщения
8
Репутация
0
В этом файле ищу "" align=absmiddle>Сойот&
Нужно соответсвенно Имя Сойот
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Код:
$a=FileRead(@ScriptDir & '\out.txt')
$q=StringRegExpReplace($a,'(?sm).*?align=absmiddle>(\S+?)&nbsp.*','\1')
MsgBox(0,'',$q)
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Пытливый [?]
Нужно соответсвенно Имя Сойот
Тогда переименуй тему, если суть в извлечений имени из текста, а не в убирании лишнего.

Код:
$vTest = FileRead("out.txt")

$sRet = StringRegExpReplace($vTest, '(?si).*align=absmiddle>(\W+)&nbsp.*', '\1')

ConsoleWrite("@error: " & @error & @LF)
ConsoleWrite("Result: " & $sRet & @LF)



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

sngr
Откуда такая уверенность что там слово из 5-ти букв?
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Ну или так:
Код:
$Read = FileRead(@ScriptDir & '\out.txt')
$Name = StringRegExp($Read, '"" align=absmiddle>(.*?) &nbsp', 3)
MsgBox(0, 'Имя', $Name[0])
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
sngr
Т.е там всегда будет имя «Сойот»? Зачем же тогда выражения, можно просто так сделать:

Код:
$sRet = "Сойот"


:laugh:
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
CreatoR твои претензии идут мимо кассы, т к твой пример не сильно лучше моего. Самый правильный пример от Zaramot
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
sngr [?]
твои претензии идут мимо кассы
Я тебе ещё не предъявлял никаких претензии.

твой пример не сильно лучше моего
Сильно, он не использует «\W{5}», об этом и шла речь. Но ты решил исправить своё сообщение, думая что никто не заметит :smile:. А полукруглую скобку ты забыл убрать, видимо в спешке :scratch:

Самый правильный пример от Zaramot
И чем он правильнее?

Тут есть несколько правильных решений, всё зависит от условий поставленной задачи.
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
CreatoR,при всём уважении, под сообщением написано время его последнего редактирования.
думая что никто не заметит
Что это?
Откуда такая уверенность что там слово из 5-ти букв
Нет уверенности в количестве букв, но откуда у тебя уверенность, что там русские буквы,пробелы и символы пунктуации(\W+)? Автор ищет никнейм, который может состоять из рус и англ. букв, пробелов и цифр. Поэтому и 2 моих варианта (\W{5}) (\S+?) и твой (\W+) не охватывют их все. Использование здесь StringRegExpReplace неоправдано, т к его шаблон надо чётче задавать. Пример Zaramot`а лучше, т к он лишён этих недостатков.
 
Автор
П

Пытливый

Новичок
Сообщения
8
Репутация
0
Извините, что послужил причиной для споров. Видимо моя вина, что дал неполные условия в своем вопросе.
Приведу весь текст кода (его всего ничего). От программирования очень далек, поэтому писалось на основе примеров из описания и форума. Уверен, что многое сделано не верно или не оптимально.
Суть. Расчет и выдача данных(наносимого урона) на основе информации из страницы персонажа. Пытаюсь получить эти данные находя строку с неизменными частями в конце и начале куска, и какой-то информацией посередине. В приведенном примере это было имя персонажа. Далее это числовое значение способности "Нападение". И в том и в другом случае ищется строка содержащая нужную информацию, отбрасываются неизменные части и получаю искомое. Но почему-то все три вывода на консоль (после выбора строки, отбрасывания начала и отбрасывания конца) выдают одинаковый результат. Вот это то мне и не понятно.
P.S. ВВодимые данные это АйДи игрока, теоретически любое чиcло от 1 до трех с чем-то миллионов.
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Код:
$a=FileRead(@ScriptDir& '\out.txt')
$q=StringRegExp($a,'(?s)title="Защита">.*? (\S{1,})</b>',1)
ConsoleWrite($q[0]&@CRLF)

Тебе это нужно?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
sngr [?]
под сообщением написано время его последнего редактирования
И что с этого?

Нет уверенности в количестве букв, но откуда у тебя уверенность, что там русские буквы,пробелы и символы пунктуации(\W+)?
Я там ошибся (кстати в начале было \S), и я признаю свою ошибку, а не пишу оправдания.
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Какие оправдания, друг мой? Или ты считаешь, что
Код:
$a=FileRead(@ScriptDir & '\out.txt')
$q=StringRegExpReplace($a,'(?sm).*?align=absmiddle>(\W{5})&nbsp.*','\1')
MsgBox(0,'',$q)
выдаст неверный рузультат?
 
Автор
П

Пытливый

Новичок
Сообщения
8
Репутация
0
Думаю
Код:
$a=FileRead(@ScriptDir& '\out.txt')
$q=StringRegExp($a,'(?s)title="Защита">.*? (\S{1,})</b>',1)
ConsoleWrite($q[0]&@CRLF)

подойдет. Я правильно понимаю, что (\S{1,}) любое количество непробельных символов не менее 1, пока не встретиться комбинация
Код:
</b>
?

Спасибо за помощь.
 
Автор
П

Пытливый

Новичок
Сообщения
8
Репутация
0
Читал, но воспринимается с трудом. Буду бороться.


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

Спасибо за помощь
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
sngr [?]
выдаст неверный рузультат?
Если между > и & будет более или менее чем 5 символов, то да, результат будет неверным.
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
А еслиб бабушка была дедушкой неизвестно чтобы было. Что ты мне пытаешься доказать? Что мой пример неуневрсален? Да это так. В этом треде нет универсальных примеров. Ты тоже не предлажил такого и мне странно слышать от тебя такие упрёки.
 
Верх