需要帮助从c#中的字符串中获取IP

时间:2014-01-21 04:48:47

标签: c# regex

所以我正在研究c#中的一个小方面项目并希望读取一个长文本文件,当它遇到行"X-Originating-IP: [192.168.1.1]"时,我想获取IP并显示控制台只识别IP# ,所以只是192.168.1.1等我无法理解正则表达式。任何能让我入门的人都非常感激。到目前为止我的内容如下。

namespace x.Originating.Ip
{
    class Program
    {
        static void Main(string[] args)
        {
            int counter = 0;
            string line;
            System.IO.StreamReader file =
                new System.IO.StreamReader("C:\\example.txt");

            while ((line = file.ReadLine()) != null)
            { 
                if (line.Contains("X-Originating-IP: "))
                Console.WriteLine(line);
                counter++;
            }

            file.Close();
            Console.ReadLine();
        }
    }
}

6 个答案:

答案 0 :(得分:4)

您不需要使用正则表达式:

if (line.Contains("X-Originating-IP: ")) {
    string ip = line.Split(':')[1].Trim(new char[] {'[', ']', ' '});
    Console.WriteLine(ip);
}

答案 1 :(得分:4)

试试这个例子:

//Add this namespace
using System.Text.RegularExpressions;

String input = @"X-Originating-IP: [192.168.1.1]";
Regex IPAd = new Regex(@"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b");
MatchCollection MatchResult = IPAd.Matches(input);
Console.WriteLine(MatchResult[0]); 

答案 2 :(得分:0)

我不确定,但我想您的文本文件每行包含一个IP地址,现在您的代码可以简化如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text.RegularExpressions;


namespace x.Originating.Ip
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] lines = System.IO.File.ReadAllLines("Your path & filename.extension");
            Regex reg = new Regex("((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)");
            for (int i = 0; i < lines.Length; ++i)
            {
                if (reg.Match(lines[i]).Success)
                {
                    //Do what you want........
                }
            }
        }
    }
}

答案 3 :(得分:0)

以下正则表达式可以为您提供所需内容:

(?<=X-Originating-IP: +)((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)

这使用正向lookbehind断言"X-Originating-IP: "存在,后跟IPv4地址。匹配仅捕获IP地址。

答案 4 :(得分:0)

看起来您正在解析MIME电子邮件,而不是执行正则表达式,考虑LumiSoft.Net.MIME,它允许您使用已定义的API访问标头。

或者,使用内置的IPAddress.Parse类,它同时支持IPv4和IPv6:

const string x_orig_ip = "X-Originating-IP:";
string header = "X-Originating-IP: [10.24.36.17]";    

header = header.Trim();
if (header.StartsWith(x_orig_ip, StringComparison.OrdinalIgnoreCase))
{
    string sIpAddress = header.Substring(x_orig_ip.Length, header.Length - x_orig_ip.Length)
        .Trim(new char[] { ' ', '\t', '[', ']' });
    var ipAddress = System.Net.IPAddress.Parse(sIpAddress);
    // do something with IP address.
  return ipAddress.ToString();
}

答案 5 :(得分:0)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            System.Net.WebClient webclient = new System.Net.WebClient();
            string ip = webclient.DownloadString("http://whatismyip.org/");
            Regex reg = new Regex("((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)");
            if (reg.Match(ip).Success)
            {
                Console.WriteLine(reg.Match(ip).ToString ());
                Console.WriteLine("Success");
            }
        //    Console.Write (ip);
            Console.ReadLine();
        }
    }
}