正規表現を使用した文字列表現(修正済み)

正規表現を使用した文字列表現(修正済み)

正規表現を使用して、次の型属性を持つパターンを表現したいと思います。

1)数値の連続したシーケンスで構成されます。シーケンスの長さは1以上です。

2) 上記の順序の最初の数値の前、上の順序の最後の数値の後、または前後の数字以外の文字が 1 つ以上あります。したがって、正規表現は次の例と一致する必要があります。

A123
A123B
#A123BNNN
.123
-123+

一方、AB123B1232つの数値のシーケンスがあるため、上記のパターンの範囲外です。この質問では、このシナリオを考慮する必要はありません。私はこれを明らかにしたことを願っています。

答え1

これはあなたが望むことを行うようですgrep

$ grep -P "^\D+\d+$|^\d+\D+$|^\D+\d+\D+$" data.txt

追加の行を追加すると、data.txtこれが必要に応じて機能することを示しているようです。

はい

$ cat data.txt 
&320
*10-
AB123-
1234
ABCDEF
a20d34
12a12
32q5858j
' 2323 '
234aaa
#A123BNNN
.123
-123+

実行例:

$ grep -P "^\D+\d+$|^\d+\D+$|^\D+\d+\D+$" data.txt
&320
*10-
AB123-
' 2323 '
234aaa
#A123BNNN
.123
-123+

grepスイッチに慣れていない場合は、 -P以下のリソースを参照してください。このスイッチを使用すると、grepPerlで利用可能なほとんどの正規表現エンジンを使用できます。

引用する

答え2

あなたの説明は、数字ではなく数字の後に続く数字、または数字の後に数字ではない数字に要約されているようです。

grep -e '[^0-9][0-9]' -e '[0-9][^0-9]'

答え3

sed '
    /^[^0-9]\+[0-9]/b    # at least non-digit either before the first digit
    /[0-9][^0-9]\+$/b    # or after the last digit
    d
'

(編集:数字がない場合を処理する必要はありません。問題の説明ではすでにこれを除外しています。

関連情報