-6

そのため、すべての IP アドレスを抽出しようとしているドキュメント (プレーン テキスト) があります。正規表現を使用してそれらを抽出できましたが、多数のバージョン番号も取得します。使用してみstring.find()ましたが、行末に使用されるエスケープ文字を見つけることができる必要があり (IP アドレスは常に行の最後のものです)、行末に使用されるエスケープ文字は不明です. これらのアドレスを引き出す方法を知っている人はいますか?

4

2 に答える 2

3

アドレスが常に行末にある場合は、その上に固定します。

ip_at_end = re.compile(r'(?:[0-9]{1,3}\.){3}[0-9]{1,3}$', re.MULTILINE)

この正規表現は、行末のドット付きクワッド (間にドットがある 4 セットの数字) のみに一致します。

デモ:

>>> import re
>>> ip_at_end = re.compile(r'(?:[0-9]{1,3}\.){3}[0-9]{1,3}$', re.MULTILINE)
>>> example = '''\
... Only addresses on the end of a line match: 123.241.0.15
... Anything else doesn't: 124.76.67.3, even other addresses.
... Anything that is less than a dotted quad also fails, so 1.1.4
... does not match but 1.2.3.4
... will.
... '''
>>> ip_at_end.findall(example)
['123.241.0.15', '1.2.3.4']
于 2013-05-24T20:44:58.967 に答える
2

説明

これにより、ipv4 アドレスが照合および検証され、個々のオクテクトが 0 ~ 255 の範囲内にあることが保証されます。

(?:([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])

ここに画像の説明を入力

免責事項

はい、OPがPythonソリューションを要求したことに気づきました。この PHP ソリューションは、式がどのように機能するかを示すためにのみ含まれています

PHPの例

<?php
$sourcestring="this is a valid ip 12.34.56.78
this is not valid ip 12.34.567.89";
preg_match_all('/(?:(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])/i',$sourcestring,$matches);
echo "<pre>".print_r($matches,true);
?>

$matches Array:
(
    [0] => Array
        (
            [0] => 12.34.56.7
        )

)
于 2013-05-24T20:56:31.400 に答える