2012-08-09 4 views
3

16 진수 또는 정규 표현식을 사용하지 않고 문자열 유효성을 검사합니다.정규 표현식을 사용하여 16 진수 문자열을 확인하십시오.

사용 된 표현은 ^[A-Fa-f0-9]$입니다. 이것을 사용하면 문자열 AABB10이 유효한 16 진수로 인식되지만 문자열 10AABB은 유효하지 않은 것으로 인식됩니다.

어떻게 문제를 해결할 수 있습니까?

+0

처음에는 '^ [A-Fa-f0-9] + $'여야합니까? –

답변

9

대부분 +이므로 regex = '^[a-fA-F0-9]+$'이 필요합니다. 그러나 문자열의 시작 부분에 선택적인 0x과 같은 것을 생각하면 (아마도)주의해야합니다. ^(0x|0X)?[a-fA-F0-9]+$'이됩니다.

+2

'^ (0x | 0X) *'는'(0 [xX])? '이어야합니다. 그렇지 않으면 표준 16 진수 문자열이 아닌 "0x0x0x0x1234abcd"와 일치합니다. 내 ans을 참조하십시오 –

+0

@ PreetKukreti 사실, 좋은 잡기. 내 대답을 업데이트 할게. – Yuushi

6

^[A-Fa-f0-9]+$

이 작동 + 일치 1 이상의 문자한다. 파이썬을 사용하여

:

In [1]: import re 

In [2]: re.match? 
Type:  function 
Base Class: <type 'function'> 
String Form:<function match at 0x01D9DCF0> 
Namespace: Interactive 
File:  python27\lib\re.py 
Definition: re.match(pattern, string, flags=0) 
Docstring: 
Try to apply the pattern at the start of the string, returning 
a match object, or None if no match was found. 

In [3]: re.match(r"^[A-Fa-f0-9]+$", "AABB10") 
Out[3]: <_sre.SRE_Match at 0x3734c98> 

In [4]: re.match(r"^[A-Fa-f0-9]+$", "10AABB") 
Out[4]: <_sre.SRE_Match at 0x3734d08> 

이상적으로 당신은 ^(0[xX])?[A-Fa-f0-9]+$ 같은 그래서 당신이 '+'를 잊지 마십시오 0x1A2B3C4D

In [5]: re.match(r"^(0[xX])?[A-Fa-f0-9]+$", "0x1A2B3C4D") 
Out[5]: <_sre.SRE_Match at 0x373c2e0> 
1

같은 포맷 일반적인 0x와 문자열에 일치시킬 수 있습니다 할 수 있습니다? "^ [A-Fa-f0-9] + $"시도 중

관련 문제