所以我正在研究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();
}
}
}
答案 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();
}
}
}