Мне нужно разделить строки адреса на 3 части, каждая разного размера. В этом случае: 40, 30 и 30 символов. Я хочу разделить входную строку пробелами, чтобы это имело некоторый смысл.
Для этого я написал регулярное выражение: (.{1,32})([ ]+.{1,30}){0,1}([ ]+.{1,30}){0,1}
и попробовал его на этом сайте: https://regex101.com. Это сработало!
Я перешел в Visual Studio, чтобы написать код, чтобы проверить его:
public static void TEST()
{
List<string> ok = new List<string>();
List<string> err = new List<string>();
var lista = GetLista();
foreach (string dir in lista)
{
Regex regex = new Regex(@"(.{1,32})([ ]+.{1,30}){0,1}([ ]+.{1,30}){0,1}");
dir = dir.Trim();
GroupCollection cap = regex.Match(dir).Groups;
if (cap.Count == 0) err.Add(dir);
else ok.Add($"{dir};{cap[0].Value};{(cap.Count > 1 ? cap[1].Value.Trim() : "")};{(cap.Count > 2 ? cap[2].Value : "")};{(cap.Count > 3 ? cap[3].Value.Trim() : "")}";);
}
File.WriteAllLines("ok.txt", txt);
File.WriteAllLines("er.txt", err);
}
Результаты очень разные, они совсем не совпадают. Являются ли регулярные выражения каким-то другим образом в C#?
Есть ли другой способ добиться этого?
РЕДАКТИРОВАНИЕ: регулярные выражения даны где отличия.
ОБНОВЛЕНИЕ Я приведу пример. Давайте возьмем следующую строку: "ЭРИК АДЕСИР КОМПАНИ ЛА ИСЛА ДЕ Л";; "ЭРИК АДЕСИР КОМПАНИ ЛА ИСЛА ДЕ Л" ;;
Требуются: "ERIK ADESIR COMPANY LA ISLA DE"; "LA PALMA"; ""
Я думаю, что проблема в том, что регулярное выражение не берет всю строку, а только ее часть.