|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Помощь в регулярных выражениях
Добрый день, есть строка S:string в которой есть:
Код:
User.MoveTo(54754,35674,-1217); User.MoveTo(9764,1258,573); User.MoveTo(9836,52964,1649); Должно получиться что-то типа: x[0]=54754; y[0]=35674; z[0]=-1217; x[1]=9764; y[1]=1258; z[1]=573; x[2]=9836; y[2]=52964; z[2]=1649; Последний раз редактировалось kenshi245, 08.06.2017 в 14:18. |
#2
|
||||
|
||||
Можно вытащить и без регулярок
Код:
var x,y,z: array[0..2] of integer; s: string = 'User.MoveTo(54754,35674,-1217); User.MoveTo(9764,1258,573); User.MoveTo(9836,52964,1649);'; procedure TForm1.Button1Click(Sender: TObject); var i: integer; rs: string; begin s:= StringReplace(s,');',',',[rfReplaceAll]); rs:= ''; for i := 1 to Length(s) do if s[i] in ['0'..'9','-',','] then rs:= rs + s[i]; for i := 0 to 2 do begin x[i]:= StrToInt(Copy(rs,1, Pos(',',rs)-1)); Delete(rs,1,Pos(',',rs)); y[i]:= StrToInt(Copy(rs,1, Pos(',',rs)-1)); Delete(rs,1,Pos(',',rs)); z[i]:= StrToInt(Copy(rs,1, Pos(',',rs)-1)); Delete(rs,1,Pos(',',rs)); end; end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
kenshi245 (08.06.2017)
|
#3
|
|||
|
|||
Цитата:
Есть одна проблемка, если будет строка 'User.MoveTo(54754,35674,-1217); User.TROLOLOLO(9764,1258,573); User.MoveTo(9836,52964,1649);'; То он не должен записывать второе значение, так как там нет User.MoveTo, а ваш скрипт это делает) |
#4
|
||||
|
||||
В первом посте про "User.TROLOLOLO" ни слова здесь предложен не по тегам разбор, а по цифрам, тогда предварительно следует убрать всё лишнее, а где и как, вам лучше видно
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#5
|
|||
|
|||
Цитата:
А как можно получить содержимое между User.MoveTo( и ); |
#6
|
|||
|
|||
Разбить на группы:
User\.MoveTo\([-\d]*,[-\d]*,[-\d]*\); Внутри группы разбить на цифры: ([-\d]+) |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
kenshi245 (09.06.2017)
|
#7
|
|||
|
|||
Цитата:
В общем попробовал такое рег. выр. Код:
RegExp.Expression := 'User.MoveTo\(([-]?[0-9]+?),([-]?[0-9]+?),([-]?[0-9]+?)\)\;'; Вот так не работает: Код:
RegExp.Expression := '/User.MoveTo\(([-]?[0-9]+?),([-]?[0-9]+?),([-]?[0-9]+?)\)\;/i'; |
#8
|
|||
|
|||
все работает. Там просто при создании объекта надо roIgnoreCase передать в параметре Options вместо указания /i в самом выражении.
|
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
kenshi245 (09.06.2017)
|