C# 如何从字符串C中找到连字符的点剥离字符串#

C# 如何从字符串C中找到连字符的点剥离字符串#,c#,regex,C#,Regex,我目前正在尝试剥离可能包含连字符的数据字符串 E.g. Basic logic: string stringin = "test - 9894"; OR Data could be == "test"; if (string contains a hyphen "-"){ Strip stringin; output would be "test" deleting from the hyphen. } Console.WriteLine(stringin); 我正在尝试使用的当前C#代码如

我目前正在尝试剥离可能包含连字符的数据字符串

E.g. Basic logic:

string stringin = "test - 9894"; OR Data could be == "test";
if (string contains a hyphen "-"){
Strip stringin;
output would be "test" deleting from the hyphen.
}
Console.WriteLine(stringin);
我正在尝试使用的当前C#代码如下所示:

    string Details = "hsh4a - 8989";
    var regexItem = new Regex("^[^-]*-?[^-]*$");
    string stringin;
    stringin = Details.ToString();

    if (regexItem.IsMatch(stringin)) {
    stringin = stringin.Substring(0, stringin.IndexOf("-") - 1); //Strip from the ending chars and - once - is hit.
    }
    Details = stringin;
    Console.WriteLine(Details);

但是,当字符串不包含任何连字符时,会拉入一个错误。

这样做怎么样

stringin.Split('-')[0].Trim();
您甚至可以使用重载的
Split
构造函数指定子字符串的最大数目

stringin.Split('-', 1)[0].Trim();

这么做怎么样

stringin.Split('-')[0].Trim();
您甚至可以使用重载的
Split
构造函数指定子字符串的最大数目

stringin.Split('-', 1)[0].Trim();
您的正则表达式要求“零或一次重复-”,这意味着即使您的输入不包含连字符,它也会匹配。此后你就这样做了

stringin.Substring(0, stringin.IndexOf("-") - 1)
它给出了索引超出范围的异常(找不到连字符)

对正则表达式做一个简单的更改,它可以使用或不使用-询问“一个或多个连字符”:

您的正则表达式要求“零或一次重复-”,这意味着即使您的输入不包含连字符,它也会匹配。此后你就这样做了

stringin.Substring(0, stringin.IndexOf("-") - 1)
它给出了索引超出范围的异常(找不到连字符)

对正则表达式做一个简单的更改,它可以使用或不使用-询问“一个或多个连字符”:


如果原始字符串包含破折号(
'-'
),您似乎希望(子)字符串从破折号开始(
'-'
),如果原始字符串不包含破折号,则希望(子)字符串从破折号开始。 如果是你的情况:

  String Details = "hsh4a - 8989";
  Details = Details.Substring(Details.IndexOf('-') + 1);

如果原始字符串包含破折号(
'-'
),您似乎希望(子)字符串从破折号开始(
'-'
),如果原始字符串不包含破折号,则希望(子)字符串从破折号开始。 如果是你的情况:

  String Details = "hsh4a - 8989";
  Details = Details.Substring(Details.IndexOf('-') + 1);

如果我是你的话,我不会在这个案例中使用正则表达式,它会使解决方案比它可能的复杂得多。 对于string,我肯定只会有几个破折号,我会使用这段代码,因为它是一行代码,非常简单:

string str= entryString.Split(new [] {'-'}, StringSplitOptions.RemoveEmptyEntries)[0]; 
如果您知道某个字符串可能包含大量破折号,则不建议使用此方法-它将创建大量不同的字符串,尽管您正在查找第一个字符串。因此,解决方案类似于以下代码:

int firstDashIndex = entryString.IndexOf("-");
string str = firstDashIndex > -1? entryString.Substring(0, firstDashIndex) : entryString;

如果我是你的话,我不会在这个案例中使用正则表达式,它会使解决方案比它可能的复杂得多。 对于string,我肯定只会有几个破折号,我会使用这段代码,因为它是一行代码,非常简单:

string str= entryString.Split(new [] {'-'}, StringSplitOptions.RemoveEmptyEntries)[0]; 
如果您知道某个字符串可能包含大量破折号,则不建议使用此方法-它将创建大量不同的字符串,尽管您正在查找第一个字符串。因此,解决方案类似于以下代码:

int firstDashIndex = entryString.IndexOf("-");
string str = firstDashIndex > -1? entryString.Substring(0, firstDashIndex) : entryString;

你不需要正则表达式。一个简单的IndexOf函数将为您提供连字符的索引,然后您可以从那里清理它

这也是开始编写单元测试的好地方。它们非常适合做这种东西

下面是代码的外观:

string inputString = "ho-something";
string outPutString = inputString;

            var hyphenIndex = inputString.IndexOf('-');
            if (hyphenIndex > -1)
            {
                outPutString = inputString.Substring(0, hyphenIndex);
            }

            return outPutString;

你不需要正则表达式。一个简单的IndexOf函数将为您提供连字符的索引,然后您可以从那里清理它

这也是开始编写单元测试的好地方。它们非常适合做这种东西

下面是代码的外观:

string inputString = "ho-something";
string outPutString = inputString;

            var hyphenIndex = inputString.IndexOf('-');
            if (hyphenIndex > -1)
            {
                outPutString = inputString.Substring(0, hyphenIndex);
            }

            return outPutString;

你不需要做细节。。这已经是一个字符串了。如果要执行“stringin=stringin.Substring(0,stringin.IndexOf(“-”)-1)”;“为什么要麻烦使用正则表达式,只需检查“-”的存在。我目前使用的是toString(),因为这是一个简化的代码示例,在我的完整代码中,它使用循环中的对象/不同的数据集从XML API提取数据。您不需要执行详细信息。toString。。这已经是一个字符串了。如果要执行“stringin=stringin.Substring(0,stringin.IndexOf(“-”)-1)”;“为什么要麻烦使用正则表达式,只需检查“-”就可以了。我目前使用的是toString(),因为这是一个简化的代码示例,在我的完整代码中,它使用循环中的对象/不同的数据集从XML API中提取数据,考虑到I@Mattlinux1-我知道:)我有兴趣知道有人认为什么是错误的,我有兴趣知道有人认为什么是错误的,考虑到I@Mattlinux1-我知道:)在没有连字符的情况下仍然会给出错误的答案,否?@Jamiec:如果
详细信息
不包含
'-'
,则
详细信息。IndexOf('-')
返回
-1
子字符串(0)
返回整个
详细信息
字符串,当不存在连字符时,该字符串仍会给出错误答案,否?@Jamiec:如果
详细信息
不包含
'-'
,则
详细信息。IndexOf('-')
返回
-1
子字符串(0)
返回整个
详细信息
字符串