정규식을 사용하여 단일 부동소수점을 0으로 바꾸는 방법

정규식을 사용하여 단일 부동소수점을 0으로 바꾸는 방법

나는 Python 스크립트를 작성 중이며 코드의 특정 지점에서 사용자에게 정수 또는 부동 소수점을 입력하도록 요청하고 정규식을 사용하여 올바른 값을 입력했는지 확인합니다.

이것은 내 스크립트의 입력 부분입니다.

import re

ask = input('Please enter some number or float: ')
match = re.match('\d+\.\d+|\d+', ask)
if match:
   print(match.group())
else:
   print('[!] Invalid value !')

이제 사용자가 float를 입력하면 22.일치가 이루어지지만 22그렇게 되기를 바랍니다.22.0

만약 그가 들어오면 .22게임은 끝나겠지만 None, 그렇게 되기를 바라요0.22

정규식을 사용하여 이 작업을 어떻게 수행할 수 있나요?

답변1

쉼표 앞이나 뒤에 숫자가 없을 수 있는 숫자를 일치시키려면 와 같은 정규 표현식이 필요합니다 \d+(\.\d*)?|\.\d+.

기본적으로 다음과 같은 네 가지 상황이 있습니다.

123
123.456
123.
.456

정수 부분과 소수 부분을 모두 선택 사항으로 만들 수는 없습니다. 포인트도 선택 사항이고 포인트 자체만으로는 허용되어서는 안 되기 때문입니다.

최소한 두 가지 옵션이 필요합니다. \d+(\.\d*)?정수 부분이 있는 숫자와 일치하며, 선택적으로 소수 부분에 점이 있고 0개 이상의 숫자가 뒤따르므로 처음 세 가지 경우가 해당됩니다. 두 번째 부분은 점으로 시작하고 뒤에 숫자가 오는 마지막 경우와 일치합니다.

여전히 있는 그대로 반환되지만 .22점이 22.첫 번째 문자인지 마지막 문자인지 확인하기 위한 검사를 쉽게 추가하고 누락된 0을 추가할 수 있습니다. 예를 들어 re.sub():

#!/usr/bin/python3
import re, sys
m = re.match("^(\d+(\.\d*)?|\.\d+)$", sys.argv[1])
if not m: 
    print("no match")
    exit(1)

s = m.group()
print(s)
s = re.sub("^\.", "0.", s);
s = re.sub("\.$", ".0", s);
print(s)

관련 정보