Что нового

Получение данных из текста

romanzko

Новичок
Сообщения
11
Репутация
0
Всем привет.
Хотел узнать у опытных пользователей регулярных выражений

Можно ли научить скрипт получать данные из текста

Пример:
Код:
$line = "сторона квадрта равна B=152@"

Допустим я хочу научить скрипт получать данные между "B=" и "@"
т.е

$b=152

Тоесть я пытаюсь научить скрипт искать совпадение в тексте "B=" и после "B=" начать считывать данные и завершить считывание до "@"
как это вижу я
Код:
if stringinstr ($line, "B=") then 
if stringinstr ($line, "@") then
дальше не знаю как задать условие что бы скопировать значение между "B=" и "@"
endif
endif
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Можно ли научить скрипт получать данные из текста
Регулярные выражения для того и были придуманы, чтобы получать данные из текста. И главное здесь именно "научить", т.е. создать шаблон под конкретные условия поиска
Код:
$line = "сторона квадрта равна B=152@"
$a = StringRegExp($line, "B=(.*)@", 3)
If IsArray($a) Then
  $b = $a[0]
  ConsoleWrite($b & @CRLF)
EndIf

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

С другой стороны, получать данные из текста можно и без регулярных выражений. Например, для вашего случая
Код:
$line = "сторона квадрта равна B=152@"
$1 = StringInStr($line, "B=")
$2 = StringInStr($line, "@")
If $1 And $2 Then
  $b = StringMid($line, $1+2, $2-$1-2)
  ConsoleWrite($b & @CRLF)
EndIf

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

Или так
Код:
#include <String.au3>

$line = "сторона квадрта равна B=152@"
$a = _StringBetween($line, "B=", "@")
If IsArray($a) Then
  $b = $a[0]
  ConsoleWrite($b & @CRLF)
EndIf
На самом деле _StringBetween использует поиск через регулярное выражение, только знать об этом не обязательно.
 
Последнее редактирование:
Автор
R

romanzko

Новичок
Сообщения
11
Репутация
0
Регулярные выражения для того и были придуманы, чтобы получать данные из текста. И главное здесь именно "научить", т.е. создать шаблон под конкретные условия поиска
Код:
$line = "сторона квадрта равна B=152@"
$a = StringRegExp($line, "B=(.*)@", 3)
If IsArray($a) Then
  $b = $a[0]
  ConsoleWrite($b & @CRLF)
EndIf

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

С другой стороны, получать данные из текста можно и без регулярных выражений. Например, для вашего случая
Код:
$line = "сторона квадрта равна B=152@"
$1 = StringInStr($line, "B=")
$2 = StringInStr($line, "@")
If $1 And $2 Then
  $b = StringMid($line, $1+2, $2-$1-2)
  ConsoleWrite($b & @CRLF)
EndIf

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

Или так
Код:
#include <String.au3>

$line = "сторона квадрта равна B=152@"
$a = _StringBetween($line, "B=", "@")
If IsArray($a) Then
  $b = $a[0]
  ConsoleWrite($b & @CRLF)
EndIf
На самом деле _StringBetween использует поиск через регулярное выражение, только знать об этом не обязательно.
Cпасибо. Здорово когда есть такая функция - которая прямо решает поставленную задачу
 
Верх