2017-10-06 6 views
4

문자열을 파싱하고 일부 문자열을 추출하려고합니다. 기본적으로 2-3 자리 숫자는 앞에 "TEST"가있는 것을 제외하고는 일치해야합니다. TEST무언가 앞에 뭔가가없는 경우 일치

_[0-9]{2,3}|\.[0-9]{2,3} 후 첫 번째 자리 무시 - -

(?<!TEST)[0-9]{2,3} 올바르게 번호와 일치하지만, 일치 : 여기

TEST2XX_R_00.01.211_TEST => 00, 01, 211 
TEST850_F_11.22.333_TEST => 11, 22, 333 
TESTXXX_X_12.34.456  => 12, 34, 456 

내가 해봤 것들 중 일부는 다음과 같습니다 몇 가지 예를 들면 다음과 같다 (_ 또는.) 앞에 문자가 있어야합니다.

나는 regex for matching something if it is not preceded by something else과 중복 될 수도 있지만 거기에 답을 얻을 수 없다는 것을 알고 있습니다.

+0

두 번째 경우에는 그룹 내에서 필요한 데이터를 캡처하여 거기에서 가져올 수 있습니까? '[_.] (\ d {2,3})'[LINK] (https://regex101.com/r/VKsXwg/1) – Gurman

+0

루아는 특정 루아 패턴만을 지원하지 않습니다. 외부 정규 표현 엔진을 사용하지 않는 한이 질문에'lua-patterns' * 태그를 붙여야합니다. 너? –

+0

@ WiktorStribiżew 네 말이 맞아, 나는 브라우저에서 실험하고 있었다. – PoVa

답변

1

불행히도, 하나의 패턴을 사용하여 Lua의 일부 시퀀스가 ​​선행되지 않은 문자열을 일치시키는 방법은 없습니다 (Lua에서는 TEST%d+|(%d+)이 작동하지 않으므로 필요한 대안을 포착하지 않아도됩니다. 루아 패턴은 대체를 지원하지 않습니다.) s:gsub("TEST%d+","")TEST<digits>+%d+ 패턴이 string.gmatch 사용 제거, 여기 Lua demo

참조

local s = "TEST2XX_R_00.01.211_TEST" 
for x in string.gmatch(s:gsub("TEST%d+",""), "%d+") do 
    print(x) 
end 

:

당신은 후 TEST + 숫자로 시작하는 모든 문자열을 제거하고 자리 덩어리를 추출 할 수 남아있는 모든 숫자 청크를 추출합니다.