从C#中的字符串中选择子字符串

时间:2014-03-04 13:43:10

标签: c# string substring

我希望在字符串中找到一个字符串。

假设我有2个字符串:

String1 = "1.1)The Element is"

String2 = "1.1)The Element is:(-) for the sub"

如果我将String1与String2进行比较,我可以得到“1.1”元素是“,这是可以的。

 int Length_Str1 = string1.Length;

 string2 = string2.Remove(Length_Str1);

但我也想得到非字母字符“:( - )”。我想继续提取角色,直到找到空格字符。但我不知道如何在C#中做到这一点。

7 个答案:

答案 0 :(得分:2)

只要Char.IsLetterChar.IsWhiteSpace返回false,您就可以使用字符:

int index = String2.IndexOf(String1);
if(index >= 0)
{
    string result = String1;
    if (String1.Length < String2.Length)
    {
        string rest = String2.Substring(index + String1.Length);
        var chars = rest.TakeWhile(c => !Char.IsLetter(c) && !Char.IsWhiteSpace(c));
        result = result + string.Join("", chars);
    }
}

请注意,您必须在文件顶部添加using System.Linq;

答案 1 :(得分:1)

这个怎么样:

string s = "1.1)The Element is:(-) for the sub";
s = s.Substring(0, s.IndexOf("(-) ") + "(-) ".Length);

这会给1.1)The Element is:(-)

string s = "1.1)The Element is:(-) for the sub";
s = s.Substring(s.IndexOf("(-) ") + "(-) ".Length);

这会给for the sub。通过你的评论:

 string String1 = "1.1)The Element is";

 string String2 = "1.1)The Element is:(-) for the sub";
 if(String2.Contains(String1))
 {
      string s = String2.Substring(String2.IndexOf(String1)+ String1.Length);
      s = s.Substring(s.IndexOf(" ")+1);  // +1 to leave space
 }

答案 2 :(得分:1)

var String1 = "1.1)The Element is";
var String2 = "1.1)The Element is:(-) for the sub";
var result = string.Empty;
if(String2.Contains(String1))
{
    result = String1 + Regex.Match(String2.Replace(String1, string.Empty), "[^\\sa-zA-Z0-9]+").ToString();
}

//result will contain String1 + ":(-)" from String2 IF there is a match

答案 3 :(得分:1)

这很容易通过正则表达式来解决:

//Note the special escape character here for the regex engine not to fail on a found ')'
string string1 = @"1.1\)The Element is:";

List<string> testStrings = new List<string>();
testStrings.Add(@"1.1)The Element is:(-) for the sub 1");
testStrings.Add(@"1.1)The Element is:) for the sub 2");
testStrings.Add(@"1.1)The Element is:[-] for the sub 3");

//Create a regular expression string based upon the 'string1' provided above.
string regularExpression = string.Format(@"(?<base>{0})+(?:[^\\sa-zA-Z0-9]+)", string1);
Regex regex = new Regex(regularExpression, RegexOptions.Multiline);
//Will contain the found results
List<string> subStrings = new List<string>();

foreach (string str in testStrings)
{
  foreach (Match match in regex.Matches(str))
  {
    if (match.Success)
    {
      subStrings.Add(str.Replace(match.Groups[0].ToString(), string.Empty));
    }
  }
}
//Display the found results
foreach (string str in subStrings)
{
  Console.WriteLine(str);
}

执行此代码后,将产生以下结果:

for the sub 1 
for the sub 2 
for the sub 3

我不确定这是否是你想要的,但是这段代码使它能够在'is:'之后有不同的模式。

修改 Hash Sling Slasher刚刚提供了相同的答案,尽管有点小:)

答案 4 :(得分:0)

如何使用此Splitstring.Join

var str1 = "1.1)The Element is";
var str2 = "1.1)The Element is:(-) for the sub";

str2 = string.Join(" ",str2.Split().Take(str1.Count(x => x == ' ')+1));

答案 5 :(得分:0)

您可以执行以下操作:

至少如果你的字符串总是使用相同的格式;)

string result = string.Join(" ", string1.Split(' ').Take(3).ToArray<string>());

我希望这会有所帮助

答案 6 :(得分:0)

以下代码应该在string1的长度之后找到第一个空格的索引。

int Length_Str1 = string1.Length;

string2 = string2.Remove(string2.IndexOf(' ', Length_Str1));

请注意,您还应该添加一些检查以确保string2比string1长,并且.IndexOf实际上找到了空格。