1 (изменено: Alex_Lexon, 2017-11-04 13:59:56)

Тема: AHK: Нужные фрагменты текста с помощью RegExMatch`a

Здравствуйте! Нуждаюсь в помощи с RegExMatch`ем.
Код следующий:

FileRead, asd, asd.txt
RegExMatch(asd, "(.*)\)", asdDva)
MsgBox,,,%asdDva1%
MsgBox,,,%asdDva2%

Файл asd:

Компьютерные системы
10:05 - 10:50IT ; Пушкин; Дятлово - A111 (Осно)
10:05 - 10:50IT ; Грибоедов; Дятлово - B407 (Осно)
11:00 - 11:45IT ; Пушкин; Дятлово - A111 (Осно)
11:00 - 11:45IT ; Грибоедов; Дятлово - B407 (Осно)

Для меня не понятно, почему asdDva2 остаётся пустой, если 4 строки подходят по условиям.

2

Re: AHK: Нужные фрагменты текста с помощью RegExMatch`a

Alex_Lexon, дак у тебя регулярка берет весь текст до ")".

Win10: LTSC (21H2); AHK: ANSI (v1.1.36.02)

3 (изменено: Alex_Lexon, 2017-11-04 11:10:45)

Re: AHK: Нужные фрагменты текста с помощью RegExMatch`a

Phoenixxx_Czar не знаю как в AHK, но вообще (.*) это регулярное выражение для всех символов кроме перехода строки и в JS работает как часы... В общем, если он берёт абсолютно весь текст до последней ), то почему в MsgBox показывает лишь одну строку, а не все разом?

4

Re: AHK: Нужные фрагменты текста с помощью RegExMatch`a

Дык AsdDva2 вообще не существует, потому и пустая. Переменная в шаблоне всего одна.

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

5

Re: AHK: Нужные фрагменты текста с помощью RegExMatch`a

belyankin12 хм... Вы уверены?

6

Re: AHK: Нужные фрагменты текста с помощью RegExMatch`a

В общем, задача следующая: преобразовать текстовый файл в переменную с содержанием:

10:05 - 10:50 IT (Пушкин)[A111]
10:05 - 10:50 IT (Грибоедов)[B407]
11:00 - 11:45 IT (Пушкин)[A111]
11:00 - 11:45 IT (Грибоедов)[B407]

либо в несколько переменных с 1 строкой на каждую.

7 (изменено: belyankin12, 2017-11-04 14:55:11)

Re: AHK: Нужные фрагменты текста с помощью RegExMatch`a

FileReadLine в цикле поможет разбирать файл построчно. A_Index в качестве аргумента, обозначающего номер строки. А если весь файл в переменную завести то FileRead. Насчёт переменны - уверен потому, что переменная всего одна "(.*)". В RexExMatch в output var помещаются значения тех фрагментов текста, которые обозначены в вашем шаблоне как переменные. Пример:

var := "12345 abcde"
RegExMatch(var, "(.*) (.*)", end_str)
; end_str1 содержит все что до пробела (первого или последнего это уже вопрос жадности, но в данном случае до первого
; end_str2 содержит все что после пробела
RegExMatch(var, "1(.*)", end_s)
; end_s1 содержит все что находится после символа 1
; end_s2 пустой, т.к. нет второй переменной в шаблоне, т.е. end_s2 не существует вообще.

; При этом в переменных end_s и end_str содержится все содержимое, которые было найдено в var по указанному вами шаблону, в случае если заданный вами шаблон существует в этой переменной, в противном - переменные пустые.

Возможно в каких-то деталях я мог ошибиться, но принцип я вам обозначил.

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.