取.split ('')和最后一个或排除最后一个项目
本文关键字:最后一个 排除 项目 split | 更新日期: 2023-09-27 18:18:26
我有一个不一致的地址字段,我从excel中读取。我需要拆分这个字段,并将这两个值输入到两个列表属性中。
内容可以像这样
在42号登机口
我需要将数字从其余部分中分离出来,并将"At the gates"添加到属性"Street"中,将"42"添加到属性"number"中
我已经用这个方法解决了这个问题:
Number = Convert.ToString(ws.Cells[j + 3, i + 2].Value).Split(' ').LastOrDefault()
我如何使用Linq拆分这个字符串并仅排除最后一个数字以获得街道?
亲切的问候
使用regex,这样您也可以灵活地满足您的需求。
下面是一个示例:
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
}
分割字符串在这里有点太多了。您只需要找到最后出现的" "并在此位置进行分割:
var address = "At the gates 42";
var idx = address.LastIndexOf(' ');
var street = address.Substring(0, idx);
var number = address.Substring(idx + 1);
如果你需要更大的灵活性,也可以考虑使用正则表达式
你可以这样做:
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));
我会使用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))