使用C#,地址拆分,仅显示名称

使用C#,地址拆分,仅显示名称,c#,C#,此代码仅显示邮政编码(2477和2024) 输入: string suburbs = address.Split(' ').Last().ToString(); 地址: 肯尼迪先生,G 牛津大道115号1单元, 阿尔斯通维尔2477 约翰·埃德先生 老南头路100号 沃森湾2024 我的努力: string suburbs = address.Split(' ').Last().ToString(); 谁能告诉我如何(使用C#)将名称拆分为唯一名称 预期输出: 阿尔斯通维尔 Watson B

此代码仅显示邮政编码(2477和2024)

输入:

string suburbs = address.Split(' ').Last().ToString();
地址:
肯尼迪先生,G
牛津大道115号1单元,
阿尔斯通维尔2477

约翰·埃德先生
老南头路100号
沃森湾2024

我的努力:

string suburbs = address.Split(' ').Last().ToString();
谁能告诉我如何(使用C#)将名称拆分为唯一名称

预期输出:
阿尔斯通维尔

Watson Bay

假设您的郊区始终位于第三行/最后一行,并且邮政编码始终仅为数字-这应该有效

string res = string.Concat( address.Split('\n').Last().Where( x => !char.IsDigit(x))).Trim();
输入:

string suburbs = address.Split(' ').Last().ToString();
约翰·埃德先生
老南头路100号
沃森湾2024

结果:


Watson Bay

我的代码看起来不是很短很专业,所以可以随意优化,但它应该会返回您预期的输出。如果地址的结构是相同的,它应该可以工作,城市名称中的数字也可以

    var firstsplit = address.Split('\n').Last();
    var secondsplit = firstsplit.Split(' ');
    var thridsplit = secondsplit.Where(x => x != secondsplit.Last());
    string erg = "";
    foreach (var split in thridsplit)
    {
        erg += split + " ";
    }
    erg = erg.TrimEnd(' ');

逻辑有点混乱,但效果很好:

string suburb = string.Join(" ", address.Split('\n').Last()
    .Split(new char[]{' '}, StringSplitOptions.RemoveEmptyEntries)
    .Reverse().Skip(1)  //to remove zip code
    .Reverse().ToArray());   //to reset the order
它获取最后一行,将其拆分并跳过最后一项,然后加入数组并返回


我不得不使用
Reverse
,因为
Skip
跳过第一项。

我假设输入来自文本文件。我再次把同样的东西放在文本框中,如果你的程序这样做的话。而不是在地址之间的空行中插入地址,找到最后一行并删除数字(如果有)

string inp = File.ReadAllText("inp.txt");
string result1 = "";
TxtWebAdd.Text = inp;
var found = TxtWebAdd.Text.Split(new string[] { "\r\n\r\n" }, StringSplitOptions.RemoveEmptyEntries);
foreach(string fn in found)
{
    result1 = result1 + Regex.Replace(fn.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries).Last().ToString(), @"[\d-]", string.Empty) + "\r\n";
}
请试试这个:

 var address = "Mr Johan Ed 100\nOld South Head RD \nVishal Watson Bay 2024";
 Regex reg = new Regex(@"\b([a-zA-Z\s]*)\b");
 var last = address.Split('\n').Last();
 var address = reg.Match(last).ToString();

我认为除非你没有固定的地址格式,否则你无法达到你的要求。如果你想得到最后的第二个字,那么你只有阿尔斯通维尔和Bay@Rob我把你的问题编排得更容易理解。如@Arvaan所说,这是不可能的,因为地址输入不是标准格式。你是如何得到这些信息的?如果它来自您控制的表单或其他方法,您可以更新它,使每个值都位于不同的字段中吗?我认为唯一可行的方法是使用类似谷歌地图的东西(您自己的名称存储也可以-如果您有名称存储)要根据现有名称检查郊区,为什么不获取一个与邮政编码相关的郊区列表,然后拆分邮政编码并从该列表中检索名称?如果我投了反对票,这将是一个更好的解决问题的办法,但它仍然让人感觉不舒服-如果邮政编码中有字母或城市名称中有数字怎么办(是的,不太可能,但我打赌某处一定有例子…)@Shaharyar这个问题应该提供一个更好的地址结构定义-如果是
Watson Bay 2024 a
,跳过方法将失败,在这种情况下,单一郊区名称将适用于您的代码,唯一的问题是一些郊区有两个名称,例如Watson Bay,您的代码将仅显示Watson@fubo是的,必须有一个定义的模式,但是作为测试用例,我们可以考虑在最后有邮政编码。附言:我不是落选者:)