장치에서 SIM 카드의 ICCID를 반환하고 인쇄하려고합니다. SIM 카드는 다양한 공급 업체에서 제공되므로 길이가 다릅니다 (19 또는 20 자리). 결과적으로 ICCID를 추출 할 정규 표현식을 찾고 있습니다 (즉, 단어를 둘러싸고있는 단어가 아닌 문자에 대해 불가지론적인 방식으로). 이것은 함께 내가 테스트했던 가장 성공적인 패턴 (했다regex를 사용하여 문자열에서 ICCID 추출
(89\d{17,18})
:
는 ICCID가 19 ~ 20 자리 문자열을 "89"로 시작으로 지정되는 것을 감안할 때, 나는 단순히위한 갔어요 일부 패턴은 아래 이유로 거부 됨). 내가로부터 추출하고있어 문자열에서 는 ICCID 즉시 캐리지 리턴 후 라인 피드,하지만\r
과 종료에 대한 몇 가지 테스트,
\n
다음에, 또는
\b
는 (프로그램을 작동 실패 내가 사용하고있는 것은 사내에서 파이썬으로 작성된 것이므로 정규 표현식에서 사용하는 것으로 생각됩니다). 또한 단순히
(\d{19,20})
을 사용하면 20 자리 ICCID의 마지막 19 자리 (세 번째 및 마지막 유효한 일치 항목)가 추출됩니다. 같은 줄을 따라, 원칙적으로
(\d{19,20})?
을 배제했는데 처음 19 자리를 찾으면 끝내기를 기대합니다.
그래서 내 질문은 : 내가 선택한 패턴을 사용해야합니까, 또는 가변 길이의 가장 긴 부분 문자열을 반환 할 더 좋은 표현식 (문자열을 프레임에 단어가 아닌 문자 사용 안함)이 있어야합니까? 자릿수?
정말 구문 분석 할 파일/텍스트의 형식에 따라 다릅니다. https://regex101.com/#python과 같은 정규 표현식 테스터에서 표현을 '튜닝'하시길 권합니다. (검색을 시뮬레이션하기 위해 "g"모드 사용) –
'\ d {19,20}'만 왜 이해가 안나요? 20 개의 문자 중 19 개의 문자와 일치합니다. 한정 기호는 탐욕적입니다. –
@ WiktorStribiżew 나는 그것이 처음 19 자리, 그 다음 모두 20 자리, 그리고 마지막 19 자리와 일치한다고 생각한다. 마지막 경기가 있기 때문에 그것이 반환됩니다. – Myles