Удалить начальные нули из IP-адреса с помощью С#

У меня есть такой IP-адрес, как "127.000.000.001", как я могу удалить ведущие нули, чтобы получить этот "127.0.0.1"? На данный момент я использую регулярное выражение, подобное этому

Regex.Replace("127.000.000.001", "0*([0-9]+)", "${1}")

Есть ли другой способ добиться этого результата без использования регулярных выражений?

Я использую визуальный C # 3.0 для этого кода


person mad madane    schedule 31.03.2012    source источник


Ответы (4)


Да, для этого есть гораздо лучший способ, чем использование регулярных выражений.

Вместо этого попробуйте использовать класс System.Net.IpAddress.

Существует метод ToString(), который возвращает удобочитаемую версию IP-адрес в его стандартной нотации. Это, вероятно, то, что вы хотите здесь.

person Cody Gray    schedule 31.03.2012
comment
Меня беспокоит ответ Брента. У меня проблема с IPAddress.Parse. ведущие нули интерпретируются как восьмеричные. так как же ToString поможет, так как сначала ему нужен IP-адрес, и чтобы сделать его из строки, которую вам нужно сначала разобрать. к сожалению, именно здесь этот ответ не работает. - person v.oddou; 15.03.2013
comment
Это будет неверно, если IP = 172.016.000.000. После вызова IPAddress.Parse(IP) результатом будет 172.14.0.0. Это неправильно. Мы должны удалить начальный 0 IP-адреса. - person NoName; 17.07.2017
comment
Значит, в методе IPAddress.Parse есть ошибка, @Phuc? Это то, что вы говорите? Вы отправили отчет об ошибке в Microsoft? Что происходит, когда вы используете конструктор? Вы видите такое же поведение? - person Cody Gray; 17.07.2017
comment
Это рассматривается как восьмеричное. Если я правильно помню, я видел это и с конструктором. IpAddress действительно нуждается в ParseExact. Смотрите ниже ответы. - person scottheckel; 18.07.2017
comment
@CodyGray, я думаю, прежде чем использовать IPAddress.Parse(), мы должны удалить начальный ноль в строке ipaddress. И тогда возвращаемый результат из IPAddress.Parse() всегда будет правильным. - person NoName; 18.07.2017

Объект IP-адреса будет обрабатывать начальный нуль как восьмеричный, поэтому его не следует использовать для удаления начальных нулей, поскольку он не будет обрабатывать 192.168.090.009.

http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/21510004-b719-410e-bbc5-a022c40a8369

person Brent    schedule 13.12.2012


вы можете использовать приведенную ниже логику, написанную на C.

#include<stdio.h>
#include<string.h>
#include <arpa/inet.h>

int main(int argc, char** argv)
{
    int inlen=strlen(argv[1])+1, cnt=0, dstcnt=0;
    char dststr[INET_ADDRSTRLEN]="";

    if(argc<2)
    {
        printf("usage: ipvalidator [ip]\n");
        return 0;
    }

    for(cnt=0; cnt<inlen; cnt++)
    {
        if(argv[1][cnt]=='\0')
        {
            break;
        }
        
        if( (argv[1][cnt]=='0') && (argv[1][cnt+1] == '0') &&
            ((cnt==0) ||(argv[1][cnt-1] == '.') || (argv[1][cnt-1] == '0')) )
        {
            continue;
        }
        
        if( (argv[1][cnt]=='0') && (argv[1][cnt+1] >= '1') && 
            (argv[1][cnt+1] <= '9') && 
            ((cnt==0) || (argv[1][cnt-1] == '.') || (argv[1][cnt-1] == '0')) )
        {
            continue;
        }

        dststr[dstcnt++] = argv[1][cnt];

    }
    dststr[dstcnt++] = '\0';

    printf("New IP String: %s\n",dststr);
    return dstcnt;
}
person akshay jain    schedule 13.07.2020
comment
В теге конкретно указано C #, но это код C. По крайней мере, конвертируйте его в С#, чтобы он стал ответом - person Martheen; 13.07.2020