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)
返回整个详细信息
字符串