ahk - получить текст после символа (пробел) - PullRequest
0 голосов
/ 07 апреля 2019

Я новичок в Autohotkeys. Я пытаюсь удалить весь текст до первого пробела в каждой строке, получая все остальное.

пример:

txt1=something
txt2=other thing

var.="-1" " " txt1 " " txt2 "`n"
var.="2" " " txt1 " " txt2 "`n"
var.="4" " " txt1 " " txt2 "`n"
;; more add ...

FinalVar:=var
;...
msgbox % FinalVar
RETURN

Токовый выход:

-1 something other thing
2 something other thing
4 something other thing

как я хочу (все строки FinalVar без Loop):

something other thing
something other thing
something other thing

В Bash я мог бы использовать что-то вроде SED

Есть ли быстрый способ сделать то же самое в ахк?

Благодаря вашему вниманию. Извините, мой английский!

1 Ответ

1 голос
/ 07 апреля 2019

Вы можете использовать комбинацию команды InStr

InStr ()
Поиск заданного вхождения строки слева или справа.
FoundPos := InStr(Haystack, Needle , CaseSensitive := false, StartingPos := 1, Occurrence := 1)

и Команда SubStr .

SubStr ()
Извлекает один или несколько символов из указанной позиции в строке.
NewStr := SubStr(String, StartingPos , Length)

С InStr вы найдете позицию первого пробела в переменной.

С помощью SubStr вы извлекаете все после этой позиции до конца строки следующим образом:

StartingPos := InStr(var, " ")
var := SubStr(var, StartingPos + 1)

Обратите внимание на + 1, он есть, потому что вам нужно начать извлекать текст 1 после пробела, иначе пробел будет первым символом в извлеченном тексте.


Для замены начального текста во всех строках вы можете использовать RegExReplace

REGEXREPLACE ()
Заменяет вхождения шаблона (регулярное выражение) внутри строки.

NewStr := RegExReplace(Haystack, NeedleRegEx , Replacement := "", OutputVarCount := "", Limit := -1, StartingPosition := 1)

FinalVar := RegExReplace(var, "m`a)^(.*? )?(.*)$", "$2")

m`a) - это параметры RegEx, ^(.*? )?(.*)$ - фактический шаблон поиска.

м Многострочный. Рассматривает стог сена как набор отдельных строк (если он содержит символы новой строки), а не как одну непрерывную строку.

`a :` a распознает любой тип новой строки, а именно `r,` n, `r`n, `v / VT / вертикальная табуляция / chr (0xB),` f / FF / formfeed / chr (0xC) и NEL / следующая линия / CHR (0x85).

...