C# 从C中的字符串中删除可变子字符串#

C# 从C中的字符串中删除可变子字符串#,c#,string,text,C#,String,Text,我有一个文本文件,其中列出了如下地址 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 按照我的代码编写方式(因为它查

我有一个文本文件,其中列出了如下地址

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
}

因为您知道公寓号码后面会有一个空格,所以您可以这样做:

int aptStartIndex = line.ToLower().IndexOf(" apt ");
int aptEndIndex = line.IndexOf(" ", aptStartIndex + 5);
line = line.Substring(0, aptStartIndex) + line.Substring(aptEndIndex);
第一行找到“apt”字符串的开头。 第二行查找“apt”之后的下一个空格。 第三行将子字符串增加到“apt”,并在“apt”之后添加子字符串,有效地删除了这两个单词


我已经测试过了。

既然你知道公寓号码后面会有一个空格,你可以这样做:

int aptStartIndex = line.ToLower().IndexOf(" apt ");
int aptEndIndex = line.IndexOf(" ", aptStartIndex + 5);
line = line.Substring(0, aptStartIndex) + line.Substring(aptEndIndex);
第一行找到“apt”字符串的开头。 第二行查找“apt”之后的下一个空格。 第三行将子字符串增加到“apt”,并在“apt”之后添加子字符串,有效地删除了这两个单词

我对它进行了测试。

您可以使用正则表达式“Apt\w+”删除Apt及其后面的数字:

Regex.Replace("123 Example Street Apt 12C City State, Zip"
              ,@" Apt \w+"
              ,"" 
              ,RegexOptions.IgnoreCase)
您可以使用正则表达式“Apt\w+”删除Apt及其后面的数字:

Regex.Replace("123 Example Street Apt 12C City State, Zip"
              ,@" Apt \w+"
              ,"" 
              ,RegexOptions.IgnoreCase)

最好只使用正则表达式:

string result = Regex.Replace(input,
    @"apt\W[0-9]+[a-z]?\W", "", RegexOptions.IgnoreCase);

然而,如果公寓这个词可以改变,正则表达式就会变得非常复杂。

最好只使用正则表达式:

string result = Regex.Replace(input,
    @"apt\W[0-9]+[a-z]?\W", "", RegexOptions.IgnoreCase);

然而,如果公寓这个词可以改变,正则表达式就会变得非常复杂。

这里是一个例子,尽管正则表达式可能是最好的方法

        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();
        }
if(line.ToLower()包含(“apt”))
{
String[]sParts=line.Split(“”);
字符串finishedLine=“”;
for(int i=0;i
这里是一个例子,尽管正则表达式方法可能是最好的

        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();
        }
if(line.ToLower()包含(“apt”))
{
String[]sParts=line.Split(“”);
字符串finishedLine=“”;
for(int i=0;i
这方面没有简单的解决方案。如果地址是“123示例街道单元12B”或“123示例街道套件12B”,该怎么办?您是否确定始终显示的值将位于相同的结构中,或者它可能会更改?请先详细说明这个列表只需要一次,所以改变结构不是问题。如果它们中的一些被忽略了,因为它们被排序了,我可以对它们进行筛选……如果我能帮助的话,我只是不想手动删除所有这些。除了apt,没有“套房”、“公寓”或任何其他词语,至少我没有发现。我希望创建这样的列表的人会想到那些必须解析它的人。。。解析时要小心,街道名称可能包含字符“apt”:123 lapton street City State对此没有简单的解决方案。如果地址是“123示例街道单元12B”或“123示例街道套件12B”,该怎么办?您是否确定始终显示的值将位于相同的结构中,或者它可能会更改?请先详细说明这个列表只需要一次,所以改变结构不是问题。如果它们中的一些被忽略了,因为它们被排序了,我可以对它们进行筛选……如果我能帮助的话,我只是不想手动删除所有这些。除了apt,没有“套房”、“公寓”或任何其他词语,至少我没有发现。我希望创建这样的列表的人会想到那些必须解析它的人。。。解析时请小心,街道名称可能包含字符“apt”:123 lapton street City State这不会删除“apt”(apt.number)后面的子字符串。@It'sNotALie。1号公寓怎么样?aptEndIndex仍将定位在正确的位置,不是吗?(如果你指的是我丢失的
ToLower
,我刚刚修复了。)@ataravati我想你的评论是在我修复错误之前针对我的帖子的。你还看到问题吗?正则表达式方法似乎不能完全工作…还有一些结果。这种方法发现了除了少数几个结果(大约120个)之外的所有结果,其中apt和公寓号被压缩在一起。谢谢。这不会删除“Apt”(Apt.number)后面的子字符串。@It'sNotALie。1号公寓怎么样?aptEndIndex仍将定位在正确的位置,不是吗?(如果你指的是我丢失的
ToLower
,我刚刚修复了。)@ataravati我想你的评论是在我修复错误之前针对我的帖子的。你还看到问题吗?正则表达式方法似乎不能完全工作…还有一些结果。这种方法发现了除了少数几个结果(大约120个)之外的所有结果,其中apt和公寓号被压缩在一起。谢谢