正則表達式匹配 shell 腳本中數組中的數字

der_radler

我有一個來自 bash 的值數組,我只想檢查其中是否有數字。它可以在開頭或結尾包含-,+數字和空格,因為 bash 將其評估為 sting。

由於每個數字都, 在末尾表示,因此我將其添加(,)到正則表達式中。

基本上我想檢查元素是否是數字。

$val樣子這些。

[ [ -0.13450142741203308, -0.3073260486125946, -0.15199440717697144, -0.06535257399082184, 0.02075939252972603, 0.03708624839782715, 0.04876817390322685 ] ,[ 0.10357733070850372, 0.048686813563108444, -0.1413831114768982, -0.11497996747493744, -0.08910851925611496, -0.04536910727620125, 0.06921301782131195, 0.02547631226480007 ] ]

這是我的代碼,它查看每個值並評估每個值。然而,它似乎沒有抓住這些案例。

re='^[[:space:]][+-]?[0-9]+([.][0-9]+)?(,)[[:space:]]$'

for j in ${val[*]}
do
  if ! [[ "$j" =~ $re ]] ; then
   echo "Error: Not a number: $j"
  fi
done

它還需要忽略 throw[]or 的情況],

任何想法如何糾正這個?謝謝您的幫助。

道格

它很可能$val以字符串的形式出現在您身上。

如果您不需要將每個數字驗證為完全合法的數字,您可以使用 shell 邏輯來過濾那些明顯不是數字的東西:

val='[ [ -0.13450142741203308, -0.3073260486125946, -0.15199440717697144, -0.06535257399082184, 0.02075939252972603, 0.03708624839782715, 0.04876817390322685 ] ,[ 0.10357733070850372, 0.048686813563108444, -0.1413831114768982, -0.11497996747493744, -0.08910851925611496, -0.04536910727620125, 0.06921301782131195, 0.02547631226480007 ] ]'

for e in $val; do  # PURPOSELY no quote to break on spaces
    e="${e/,}"
    case $e in
        ''|*[!0-9.\-]*)  printf "'%s' is bad\n" "$e" ;;
        *) printf "'%s' is good\n" "$e" ;;
    esac
done    

印刷:

'[' is bad
'[' is bad
'-0.13450142741203308' is good
'-0.3073260486125946' is good
'-0.15199440717697144' is good
'-0.06535257399082184' is good
'0.02075939252972603' is good
'0.03708624839782715' is good
'0.04876817390322685' is good
']' is bad
'[' is bad
'0.10357733070850372' is good
'0.048686813563108444' is good
'-0.1413831114768982' is good
'-0.11497996747493744' is good
'-0.08910851925611496' is good
'-0.04536910727620125' is good
'0.06921301782131195' is good
'0.02547631226480007' is good
']' is bad
']' is bad

這是超快的,但會在格式錯誤的“數字”上失敗,例如 123-456


如果您確實需要過濾掉格式錯誤的數字,您可以使用awk

echo "$val" | awk  -v RS="[^0-9.+-]+" '($0+0==$0)'
# all legit numbers from the string...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

谷歌腳本中 array.indexOf() 的正則表達式匹配問題

在 Python 中匹配 arxiv 正則表達式

正則表達式匹配python中引用的句子

正則表達式匹配日期中的數字但不應該

正則表達式排除匹配字符串的最後兩個字符是 - 和數字的組合

postgresql 函數中的正則表達式

正則表達式計數不匹配(字符串中的偶數“a”和“b”)

數字的條件(?)正則表達式

正則表達式 php 前瞻數字

正則表達式:排除所有偶數/奇數匹配

使用正則表達式部分屏蔽一組數字的數據

正則表達式匹配 R 中的“dem”但不匹配“democrat”

正則表達式匹配帶和不帶逗號的數字和小數

多正則表達式在python中抓取數字

用於查找數字的正則表達式在 Swift 中以特殊字符結尾

正則表達式字符串在javascript中只包含數字和*,#,+

在 Python 中使用正則表達式擺脫星號“*”中的數字

Javascript - 如何在正則表達式中搜索大於 x 的數字

正則表達式匹配數至少包含一次 [1-9]

Python正則表達式 - 從數字字符開始匹配

用於從多個 Hive 數據庫中的所有 Hive 表中提取行數的 Shell 腳本

如何在 BigQuery 中的數組中使用正則表達式

MongoDb 正則表達式在數組對像中搜索

正確使用正則表達式匹配或分組方法

匹配正則表達式中的連續數字,同時忽略python3 re中的破折號

有沒有辦法獲得我用來匹配 4 個數字的正則表達式?

正則表達式匹配所有非單詞字符,除非在數字之間

正則表達式與文本中的重音匹配,而不是查詢中的重音

無法從 javascript 中的正則表達式匹配中獲取所需的值