부동 소수점 숫자와 일치시키기 위해 정규식을 사용하고 있습니다.
for f in $float_numbers ; do
if [ $f =~ "[0-9]*\.?[0-9]*" ] ; then
echo "****f is $f ****"
fi
done
, 등 $float_numbers
의 부동 소수점 숫자를 포함 합니다 1.2
.10.5
4.0
하지만 일치하는 것이 없습니다.
답변1
terdon이 구문을 수정했지만 정규식이 잘못되었습니다.
[0-9]*\.?[0-9]*
모든 수량자( *
, ?
)는 표현식의 모든 부분이 선택 사항임을 나타냅니다. 즉, 정규식은 빈 문자열과 숫자가 없는 문자열을 포함하여 모든 문자열과 일치합니다.
부동 소수점 숫자를 일치시키려면 최소한 하나의 숫자가 일치해야 합니다.
([0-9]+\.?[0-9]*)|([0-9]*\.[0-9]+)
선택적 소수점 및 선택적 숫자(예: 3.14 또는 42)가 있는 일부 숫자 또는 소수점 및 필수 숫자가 있는 일부 선택적 숫자(예: .1234 또는 3.14)와 일치합니다.
고정되어 있지 않으므로 "PI는 3.14로 시작하고 계속됩니다"라는 문자열이 일치합니다.
시험:
for n in "" "no digits" 42 3.14 "this is .1234 go"; do
if [[ $n =~ ([0-9]+\.?[0-9]*)|([0-9]*\.[0-9]+) ]]; then
echo "yes -- $n -- ${BASH_REMATCH[0]}"
fi
done
yes -- 42 -- 42
yes -- 3.14 -- 3.14
yes -- this is .1234 go -- .1234
답변2
첫째, 코드에 구문 오류가 있어 다음과 같은 오류가 발생합니다.
bash: [: =~: binary operator expected
bash를 실행하고 있다고 가정하지만 코드에 따라 그럴 수도 있습니다. 따라서 bash에서는 정규식 =~
을 인용해서는 안 [[ ]]
됩니다 [ ]
. 당신은 다음과 같은 것을 찾고 있습니다 :
$ for f in $float_numbers; do
[[ $f =~ [0-9]*\.?[0-9]* ]] && echo $f
done
1.2
10.5
4.0
그러나 글렌의 말이 옳다지적, 우선 정규식이 잘못되었습니다.
답변3
이것을 사용하는 것이 좋습니다txt2reregex
원하는 경기를 만드세요 .
당신을 위한 스크립트:
for f in $float_numbers ; do
if [[ $f =~ ^[+-]?[0-9]+\.?[0-9]*$ ]]; then
echo "****f is $f ****"
fi
done
재해석:
^ # Match start of string
[-+]? # Match a leading + or - (optional)
[0-9]+ # Match one or more digit
\.? # Match a literal . (optional, escaped)
[0-9]* # Match zero or more digits
$ # Match the end of the string
perl
다음은 부동 소수점 숫자와 일치시키기 위해 이전 사이트에서 생성된 스크립트 입니다.
#!/usr/bin/perl
# URL that generated this code:
# http://txt2re.com/index.php3?s=100.3&1
$txt='100.3';
$re1='([+-]?\\d*\\.\\d+)'; # Float 1
$re=$re1;
if ($txt =~ m/$re/is)
{
$float1=$1;
print "($float1) \n";
}
#-----
# Paste the code into a new perl file. Then in Unix:
# $ perl x.pl
#-----
답변4
부동 소수점 숫자와 일치하는 보다 정확한 정규식은 다음과 같습니다.
^[-+]?([0-9]*\.[0-9]+|[0-9]+\.[0-9]*)$
플로트에 대한 견해에 따라 다릅니다. 예를 들어 Python은 5.
및 .5
유효한 부동 소수점 숫자를 허용하며 앞이나 뒤에 선행 또는 후행 숫자가 필요하지 않습니다 .
.
>>> 5.
5.0
>>> .5
0.5
따라서 위의 정규식은 이러한 경우뿐만 아니라 단지 .
(should) 의 극단적인 경우도 처리합니다.아니요경쟁이 된다).