0

Pythonでスクリプトを書いていますが、ファイル内のIPを検索して置換する必要があります。

それをどのように実装できるかについてのアイデアはありますか?

4

2 に答える 2

3

IPv4アドレスの場合、Regular-Expression.infoによって提供される正規表現を使用できます。これにより、IPアドレスが実際に有効になります。

IPアドレスの照合は、正規表現の複雑さと正確さの間のトレードオフのもう1つの良い例です。\ b \d{1,3}。\d{1,3}。\d{1,3}。\d{1,3} \ bは任意のIPアドレスに問題なく一致しますが、999.999.999.999にも一致します有効なIPアドレスであるかのように。これが問題であるかどうかは、正規表現を適用する予定のファイルまたはデータによって異なります。IPアドレスの4つの数字すべてを0..255に制限するには、次の複雑な獣を使用できます:\ b(25 [0-5] | 2 [0-4] [0-9] | [01]?[0 -9] [0-9]?)。(25 [0-5] | 2 [0-4] [0-9] | [01]?[0-9] [0-9]?)。(25 [0-5] | 2 [0-4] [0-9] | [01]?[0-9] [0-9]?)。(25 [0-5] | 2 [0-4] [ 0-9] | [01]?[0-9] [0-9]?)\ bこの正規表現をRegexBuddy(1行のすべて)で分析します。長い正規表現は、IPアドレスの4つの番号のそれぞれをキャプチャグループに格納します。これらのグループを使用して、IP番号をさらに処理できます。

個々の数値にアクセスする必要がない場合は、数量詞を使用して正規表現を次のように短縮できます。\ b(?:(?: 25 [0-5] | 2 [0-4] [0-9] | [ 01]?[0-9] [0-9]?)。){3}(?: 25 [0-5] | 2 [0-4] [0-9] | [01]?[0-9 ] [0-9]?)\bRegexBuddyを使用してこの正規表現を分析します。同様に、クイック正規表現を\ b(?:\ d {1,3}。){3} \ d {1,3}\bに短縮できます。この正規表現をRegexBuddyで分析します。

于 2012-07-02T08:20:15.527 に答える
2

正規表現!

re.sub('[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}','CENSORED_IP',data)

注目に値するのは、これは999.999.999.999のようなものにも一致します。それが問題になる場合は、もう少し複雑な正規表現を取得する必要があります。さらに、これはIPv4アドレスでのみ機能します。

有効なIPのみ:

re.sub('(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)','CENSORED_IP',data)

出典:正規表現ソース

于 2012-07-02T08:13:27.500 に答える