2017-12-26 128 views
3

저는 autohotkey를 사용하여 정규식을 배우고 있지만 특정 문자열을 추출하고 변수에 저장하는 방법을 알 수 없습니까?Autohotkey는 정규식을 사용하여 텍스트를 추출합니다

내가 검색하고 텍스트의

라인 : T NW CO NORWALK HUB NW 201-DS3-WLFRCTAICM5-NRWLCT02K16 [DS3 LEC] -1 -1 PSTN 내가 저장하려고

, NW 201-DS3- WLFRCTAICM5-NRWLCT02K16 [DS3 LEC]에만 해당됩니다.

내 정규식 코드는 다음과 같습니다. NW \ D \ d. DS3.]

하지만 오토 호트의 변수로 어떻게 저장할 수 있습니까?

RegexMatch를 시도했지만 위치 만 보여줍니다. 나는 잘못된 것을하고있다.

RegExMatch(str,"NW\D\d.*DS3.*\]",matches) 

그런 다음, matches[0] 경기를 포함합니다 :

+1

REGEXMATCH '는 (STR "NW는 \ D \ D. * DS3. * \]"일치)'다음 '일치 [0]'경기를 포함 할 것이다. –

답변

1

당신은 경기 배열을 보유 할 세 번째 인수를 제공 할 수 있습니다.

패턴 내부에서 캡처 그룹을 사용하는 경우 추가 색인을 사용하여 값에 액세스 할 수 있습니다. "NW 5xxx DS3 yyy]"NW\D(\d.*DS3.*)\]"을 사용하는 경우 전체 문자열은 matches[0]이고 matches[1]5xxx DS3 yyy입니다.

참조 AHK RegExMatch 문서 :

FoundPos := RegExMatch(Haystack, NeedleRegEx [, UnquotedOutputVar = "", StartingPosition = 1])

UnquotedOutputVar 모드 1 (기본값) :OutputVar에의 일부 건초 더미를 저장할 변수의 인용 부호로 둘러싸이지 않은 이름입니다 전체 패턴과 일치하는 패턴을 찾을 수 없으면 (즉, 함수가 0을 반환하는 경우)이 변수와 아래의 모든 배열 요소는 비어 있습니다. 어떤 capturing subpatterns는 NeedleRegEx 안에 존재한다면

가 그 경기는 그 pseudo-array베이스 명에 저장되는 것은 OutputVar에이다. 예를 들어 변수 이름이 이고 일치 문자가이면 첫 번째 하위 패턴과 일치하는 하위 문자열은 Match1에 저장되고 두 번째 문자열은 Match2에 저장됩니다. 예외는 named subpatterns입니다. 번호 대신 이름으로 저장됩니다. 예를 들어, 명명 된 하위 패턴 "(?P<Year>\d{4})"과 일치하는 하위 문자열은 MatchYear에 저장됩니다. 특정 하위 패턴이 아무 것도 (또는 함수가 0을 반환하면) 일치하지 않으면 해당 변수가 비어있게됩니다.

+1

감사합니다. 그것은 당신이 설명했던 방식에 훨씬 더 합리적입니다. –

1
; If you want to delete ALL .... 

Only(ByRef C) 
{ 

/* 
RegExReplace 
https://autohotkey.com/docs/commands/RegExReplace.htm 
*/ 

; NW 201-DS3-WLFRCTAICM5-NRWLCT02K16 [DS3 LEC] 

C:=RegExReplace(C, "NW\s[\w-]+\s\[[\w\s]+\]","",ReplacementCount,-1) 

if (ReplacementCount = 0) 
return C 
else 
return Only(C) 

} ; Only(ByRef C) 

string:="Line of text I am searching: T NW CO NORWALK HUB NW 201-DS3-WLFRCTAICM5-NRWLCT02K16 [DS3 LEC] -1 -1 PSTN" 

Result:=Only(string) 
MsgBox, % Result 
MsgBox, % Only(string)