我有一个不正确的地址字段,我正在从excel中读取。我需要拆分这个字段并将这两个值输入两个列表属性。
内容可能是这样的
在大门42
我需要从其余部分拆分数字,并将“在门口”添加到物业“街道”,将“42”添加到物业“号码”
我用这个数字解决了问题:
Number = Convert.ToString(ws.Cells[j + 3, i + 2].Value).Split(' ').LastOrDefault()
如何将此字符串与Linq分开并只排除最后一个数字以获取街道?
亲切的问候
答案 0 :(得分:2)
分裂字符串在这里有点太多了。你只需找到“”的最后一次出现并在这个位置拆分:
var address = "At the gates 42";
var idx = address.LastIndexOf(' ');
var street = address.Substring(0, idx);
var number = address.Substring(idx + 1);
如果您需要更多灵活性,还可以考虑使用正则表达式。
答案 1 :(得分:2)
使用正则表达式,这样您也可以灵活地满足您的需求。
以下是一个示例:
static void Main(string[] args)
{
Regex regex = new Regex(@"(?<words>[A-Za-z ]+)(?<digits>[0-9]+)");
string input = "At the gates 42";
var match = regex.Match(input);
var a = match.Groups["words"].Value; //At the gates
var b = match.Groups["digits"].Value; //42
}
答案 2 :(得分:0)
你可以这样做:
String[] sa = Convert.ToString(ws.Cells[j + 3, i + 2].Value).Split(' ');
Int32 number = Convert.ToInt32(sa[sa.Length - 1]);
String street = String.Join(" ", sa.Take(sa.Length - 1));
答案 3 :(得分:0)
我会使用LastIndexOf(如果您可以安全地假设您的门牌号码没有空格):
var original = Convert.ToString(ws.Cells[j + 3, i + 2].Value).Split().LastOrDefault()
var street = original.Substring(1, original.LastIndexOf(' '))
var number = original.Substring(original.LastIndexOf(' ') + 1)
请注意,让Excel为您完成工作可能更容易,但您可以在工作表中使用公式来执行相同的功能,所以......
这为您提供街道名称(假设您的原始值在单元格A1中,否则只替换所有出现的A1):
=MID(A1,1,LOOKUP(9.9999999999E+307,FIND(" ",A1,ROW($1:$1024)))-1)
这会给你一个数字:
=MID(A1,LOOKUP(9.9999999999E+307,FIND(" ",A1,ROW($1:$1024)))+1,LEN(A1))