Каким образом можно отфильтровать строку в C#?

Здравствуйте! У меня есть форма, в которую я отправляю строку следующего кода: 
<pre><code class="cs">namespace RtspViewer.Forms
{
    public static class Db
    {
        public static string Iptext = "default";
    }
}</code></pre> 
В эту форму могут попадать адреса в следующих форматах: 
1. <a>rtsp://192.0.0.1:554/trackID=2</a> 
2. 192.168.5.17:554/trackID=2 
3. 255.255.0.0:554 

Как можно отфильтровать данные, чтобы извлечь только IP-адреса без портов и других ненужных символов? 

Заранее благодарю за помощь!
  • 18 декабря 2024 г. 20:33
Ответы на вопрос 2
Чтобы отфильтровать строки и извлечь только IP-адреса из указанных вами форматов, вы можете воспользоваться регулярными выражениями. В C# это можно сделать с помощью класса `Regex`. Вот пример кода, который демонстрирует, как это сделать:

```csharp
using System;
using System.Text.RegularExpressions;

namespace RtspViewer.Forms
{
    public static class IpFilter
    {
        public static string ExtractIpAddress(string input)
        {
            // Шаблон для поиска IP-адресов
            string pattern = @"(?<ip>(\b(?:[0-255]{1,3}\.){3}(?:[0-255]{1,3})\b))";
            // Используем регулярное выражение для поиска совпадений
            Match match = Regex.Match(input, pattern);

            if (match.Success)
            {
                // Возвращаем найденный IP-адрес
                return match.Groups["ip"].Value;
            }

            return string.Empty; // Если IP не найден, возвращаем пустую строку
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            // Примеры адресов
            string[] addresses = {
                "rtsp://192.0.0.1:554/trackID=2",
                "192.168.5.17:554/trackID=2",
                "255.255.0.0:554"
            };

            foreach (var address in addresses)
            {
                string ip = IpFilter.ExtractIpAddress(address);
                Console.WriteLine($"Извлеченный IP: {ip}");
            }
        }
    }
}
```

### Пояснение к коду:

1. **Regex.Match**: Используется для поиска совпадений в строке на основе заданного шаблона.
   
2. **Шаблон**: `@"(?<ip>(\b(?:[0-255]{1,3}\.){3}(?:[0-255]{1,3})\b))"` 
    - `\b` — граница слова, позволяет избежать захвата лишних символов.
    - `(?:[0-255]{1,3}\.){3}` — три группы, каждая из которых состоит из 1-3 цифр от 0 до 255, заканчивающихся точкой.
    - `(?:[0-255]{1,3})` — последняя группа из 1-3 цифр от 0 до 255.
   
3. **Match.Groups**: Позволяет получить значение группы, которая соответствует найденному IP-адресу.

### Запуск:
При запуске программы вы получите консольный вывод с извлеченными IP-адресами из заданных строк. Если строка не содержит IP-адреса, будет возвращена пустая строка.
var ip_port = new UriBuilder(Iptext).Uri.Authority
Похожие вопросы