일반적으로 문자열이 간단한 형식과 일치하는지 확인하는 가장 좋은 방법은 실제로 구문 분석을 시도하는 것입니다. (특히 검사 만하는 경우에는 유효하다면 구문 분석을하고 그렇지 않은 경우에는 오류를 인쇄하십시오.) 그럼, 해보 죠.
표준 라이브러리는 모든 종류의 유용한 것들로 가득 차 있기 때문에 검색 할 가치가 있습니다. 16 진수 문자열을 파싱하려면 가장 먼저 오는 것은 binascii.unhexlify
입니다. 우리는 첫 번째 #
문자 뒤에 모든 것을 ununlify하고 싶습니다. 그래서 :
는
import binascii
def parse_bgcolor(bgcolor):
if not bgcolor.startswith('#'):
raise ValueError('A bgcolor must start with a "#"')
return binascii.unhexlify(bgcolor[1:])
def is_bgcolor(bgcolor):
try:
parse_bgcolor(bgcolor)
except Exception as e:
return False
else:
return True
이 3 자리 16 진수 문자열을 받아 (하지만 그래서 대부분의 #
-prefixed 진수 RGB를 사용하는 데이터 포맷 할), 심지어 16 문자 것들. 길이에 대한 수표를 추가하려면이를 추가 할 수 있습니다. 규칙 == 6
또는 in (3, 6)
또는 % 3 == 0
입니까? 나도 몰라,하지만 당신이 추가하고 싶은 규칙이 있다면 아마 할 것입니다.
parse_bgcolor
을 사용하면 0-65535의 3 가지 값을 원할 때의 값이 0-255 인 값을 얻을 수 있습니다. 수동으로 조합하거나 각 두 자리 문자 쌍을 숫자 (예 : int(pair, 16)
)로 파싱하거나 과 같이 이미 포함 된 6 자의 bytes
을 피드 할 수 있습니다. 당신이하고 싶은 일을 정확히 알게되면 당신이해야 할 일은 꽤 쉽습니다.
마지막으로 CSS 또는 HTML을 구문 분석하려는 경우 red
또는 rgb(1, 2, 3)
과 같은 항목도 유효한 색상입니다. 그걸 처리해야합니까? 그렇다면 이보다 조금 더 똑똑한 것이 필요할 것입니다. 가장 먼저 할 일은 구문 분석하려는 내용의 스펙을 살펴보고 코드로 전환하는 데 필요한 규칙을 작성하는 것입니다. 그런 다음 코드를 작성할 수 있습니다.
"바이너리"가 무슨 뜻인지 모르겠지만 올바른 플로트 표현인지 여부를 확인하는 것은 "바이너리"의 의미와 일치하지 않는 것 같아요. 확실히 당신이 원하는 것이 아닙니다. 여기 -' # FAF0E6'는 float 표현에 가깝지 않으며'1.23e6'와 같은 float 표현은 RGB 16 진수 문자열에 근접하지 않습니다. – abarnert
무엇을위한 valib rgb 헥스? 예를 들어 css는 #fff를 받아 들일 것입니다 –
"#"을 제거하고 그것을'int (text.replace ("#", ''), 16)로 전달해야합니다 :' –