正規表現の検索と置換[閉じる]

正規表現の検索と置換[閉じる]

数値のコレクションである.txtファイルがあります。次のようになります。

[...]
6 2
7 999
8 105
9 78
10 45
11 6666
[...]

最大4桁のインデックスを作成します。

今度はPythonに数字をリストに入れたいと思います。これはリストが必要であることを意味します。

[2, 999, 105, 78, ...]

だから、インデックスとインデックスの後のスペースを削除し、各項目の後にカンマを設定したいと思います。私はこれに慣れていませんが、正規表現で使用する必要があることを知っています。助けてください?

答え1

Python必要に応じて使用:

file_path = 'file.txt'

with open(file_path, 'r') as file:
    c2 = [int(line.split()[1]) for line in file]

print(c2)

答え2

すべての行には2つの数字が含まれているため、正規表現を使用する必要はありません。awkコマンドを使用してください。

短い冗談:

awk 'NR==2 {SEP=", "} {RES=RES SEP $2} END {printf "[%s]\n", RES}' file.txt

より良い読みやすさのための複数行:

awk '
  NR == 2 { SEP=", " } 
  { RES = RES SEP $2 } 
  END { printf "[%s]\n", RES }
' file.txt

結果:

[2, 999, 105, 78, 45, 6666]

答え3

使用真珠

~$ perl -ane 'push @a, $F[1]; END { print "[", join(", ", @a), "]\n" };'  file
[2, 999, 105, 78, 45, 6666]

上記では、Perlは-aneプログレッシブ、自動分割、および非自動印刷モードで使用されます。BEGINブロックする必要はありません。配列は@a自動的にアクティブになり、要素をpush追加できます。この場合、$F[1]スペースに分割された後の2番目の列です。 (参考にしてもpush @a, split /\s+/, $F[1]動作しますが、split /\s+/ここでは重複しています)。このENDブロックでは、@a配列要素はjoin必要に応じて編集され、左右の角printかっこを使用して呼び出されます。


使用幸せ(以前のPerl_6)

~$ raku -ne 'my @a.push: .split(/\s+/).[1]; END @a.join(", ") andthen put "[$_]";'   file
[2, 999, 105, 78, 45, 6666]

上記では、Rakuは行ごと-neの非自動印刷モードで使用されます(RakuはPerlよりもコマンドラインフラグが少ない)。BEGINブロックは必要ありませんが、配列呼び出しを使用して(または)範囲を@a設定する必要があります。入力行は空白(略語)に分割され、2番目の列は編集されます。ブロックには括弧は必要ありません。必要に応じて配列要素を編集し、テーマを再ロードして最終出力呼び出しを簡素化し、左右の角かっこを使用します(最後に改行を追加)。myour$_\s+.split$_.split[1]push@aEND@ajoinandthen$_"[$_]"put


入力例:

6 2
7 999
8 105
9 78
10 45
11 6666

答え4

私はこれを使って2番目のフィールドを印刷し、最初にaを追加し、末尾のaをaに置き換えるawk簡単な置き換えを行います。sed[,]\n

$ awk '{ printf "%s, ",$2}' file | sed 's/^/[/; s/, $/]\n/'
[2, 999, 105, 78, 45, 6666]

ここでは、ファイル内のすべてのエントリがインデックスとその値であると仮定します。ヘッダがない場合、出力に望ましくない内容はありません。そうでない場合は、それを含む入力例で質問を更新してください。

関連情報