我有一个文本文件,列出地址如下。
123 Fake Street City State, Zip
124 Fake Street City State, Zip
...
我写了一个C#程序,它修剪了开头的数字并过滤掉了街道(我正在寻找数据中的独特街道)。但是,当地址中有公寓时,他们会这样读。
123 Example Street Apt 12B City State, Zip
123 Example Street Apt 12C City State, Zip
使用我的代码编写方式(因为它查找完全唯一行),它不会消除这些公寓号。我想要做的是删除“apt”和仅跟随它的子串。问题是,这些公寓号码可以是任何长度。我将在下面的代码中删除apt +公寓号码?
if (line.ToLower.Contains(" apt "))
{
//Remove apt + substring following it
}
答案 0 :(得分:2)
由于您知道公寓号码后面会有空格,您可以这样做:
int aptStartIndex = line.ToLower().IndexOf(" apt ");
int aptEndIndex = line.IndexOf(" ", aptStartIndex + 5);
line = line.Substring(0, aptStartIndex) + line.Substring(aptEndIndex);
第一行找到“apt”字符串的开头。 第二行找到“apt”之后的下一个空格。 第三行将子字符串带到“apt”,并在“apt”之后的单词之后添加子字符串,有效地删除了两个单词。
我测试了它HERE。
答案 1 :(得分:1)
您可以使用RegEx " Apt \w+ "
删除apt及其后面的数字:
Regex.Replace("123 Example Street Apt 12C City State, Zip"
,@" Apt \w+"
,""
,RegexOptions.IgnoreCase)
答案 2 :(得分:1)
最好只使用正则表达式:
string result = Regex.Replace(input,
@"apt\W[0-9]+[a-z]?\W", "", RegexOptions.IgnoreCase);
但是,如果公寓的单词可能会有所不同,那么正则表达式会变得更加复杂。
答案 3 :(得分:1)
这是一个例子,虽然正则表达式可能是最好的。
if (line.ToLower().Contains(" apt "))
{
String[] sParts = line.Split(' ');
string finishedLine = "";
for(int i = 0; i < sParts.Length; i++)
{
if (sParts[i].ToLower().Equals("apt"))
{
i++;
}
else
{
finishedLine += sParts[i] + " ";
}
}
line = finishedLine.Trim();
}