使用C#,地址拆分,仅显示名称
此代码仅显示邮政编码(2477和2024) 输入:使用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
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是的,必须有一个定义的模式,但是作为测试用例,我们可以考虑在最后有邮政编码。附言:我不是落选者:)