2016-03-05 31 views
0

我想提出一个代理刮板程序的某些字符串,我需要找到代理服务器阵列中的C#中找到一个数组

这里是什么,我想摆脱这一行的例子:

document.write('77.237.138.51')

我想删除document.write('" and "')所以它只显示了代理

这里是我当前的代码:

client.DownloadFile("http://www.gatherproxy.com/sockslist", "source.txt"); 
string [] lines = File.ReadAllLines("source.txt"); 
string start = "document.write('"; 
string end = "')"; 

现在我将如何使它所以在那里我可以删除开始和结束并返回中间元素(代理)

在回答Domysee

using (WebClient client = new WebClient()) 
      client.DownloadFile("http://www.gatherproxy.com/sockslist", "source.txt"); 
      string[] lines = File.ReadAllLines("source.txt"); 
     for (int i = 0; i < 1000; i++) 
     { 
      string[] ipAddresses = lines.Select(l => Regex.Match(l, @"(\d+\.){3}\d+").Value).ToArray(); 
      i++; 
      string[] port = lines.Select(l => Regex.Match(l, @"(\d+\.){3}\d+").Value).ToArray(); 
      Console.WriteLine(ipAddresses + ":" + port); 
     } 
      Console.ReadLine(); 
+0

所以的Source.txt所包含的行格式 “文件撰写('11 .111.111.11' )”,你需要 “11.111.111.11” 的呢? – Domysee

+0

是的,这是正确的。 – Zezima

+0

您的源文件包含其他具有IP地址的行? – Enigmativity

回答

1

您可以利用Regex用于这一目的。

string[] ipAddresses = lines.Select(l => Regex.Match(l, @"(\d+\.){3}\d+").Value).ToArray(); 

正则表达式将提取与ip地址对应的位。

ipAddresses是一个字符串数组。如果将它与另一个字符串连接起来(如Console.WriteLine(ipAddresses + ":" + port);中所做的那样,将调用其ToString方法,即“System.String []”。

要输出IP地址,您必须遍历数组。

string[] lines = File.ReadAllLines("source.txt"); 
string[] ipAddresses = lines.Select(l => Regex.Match(l, @"(\d+\.){3}\d+").Value).ToArray(); 
for(int i = 0; i < ipAddresses.Length; i++){ 
    Console.WriteLine(ipAddresses[i]); 
} 
+0

我只是不会重复使用'lines'。变量很便宜。 –

+0

@HenkHolterman是的,你是对的,改变它 – Domysee

+0

System.String []返回而不是IP地址。我错过了什么吗? – Zezima

0

你可以使用LINQ:

string[] lines = File.ReadAllLines("source.txt"); 

string[] ipAddresses = lines.Select(line => String.Join("", line.SkipWhile(c => c != '\'') 
                   .Skip(1) 
                   .TakeWhile(c => c != '\''))) 
          .ToArray();