我希望在字符串中找到一个字符串。
假设我有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#中做到这一点。
答案 0 :(得分:2)
只要Char.IsLetter
和Char.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)
如何使用此Split
和string.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实际上找到了空格。