나는 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)