我有一个非常长的字符串,我想从中提取与每个字符串开头的模式匹配的字符串。例如,假设我有这个:
string TheLongString = Lorem ipsum "SomeWordOne" dolor sit "SomeWordTwo" amet;
如何从此字符串中提取所有引号中的字符串并以SomeWord开头?例如,在这种情况下,列表应包含"SomeWordOne"
和"SomeWordTwo"
。
感谢。
答案 0 :(得分:1)
第1步:您需要使用split
方法Space
基于string.Split()
分隔符的字符串"SomeWord
。
第2步:迭代所有单词,并使用string.StartsWith()
方法识别是否有任何单词以字符串List
开头。如果它在那里然后将其添加到string str="string TheLongString = Lorem ipsum \"SomeWordOne\"
dolor sit \"SomeWordTwo\" amet;";
var words = str.Split(new []{' '},StringSplitOptions.RemoveEmptyEntries);
List<string> selectedWords = new List<string>();
foreach (var word in words)
{
if (word.StartsWith("\"SomeWord"))
selectedWords.Add(word);
}
试试这个:
someword
如果您的{{1}}包含空格,那么编辑如评论中所示,则上述方法不适用。
答案 1 :(得分:1)
假设您要搜索的模式不是一个单词(kd.'s answer将适用于此),您可以使用正则表达式匹配来执行您想要的操作:
Regex regex = new Regex("\"SomeWord[^\"]*\"");
var matches = regex.Matches(TheLongString);
List<string> myMatchedStrings = new List<string>();
foreach (Match match in matches)
{
myMatchedStrings.Add(match.Value);
}
如果您不希望结果中包含双引号,请使用以下插入式替换,使用Regex Look Behind查找您的开场报价,但实际上不会显示在结果中:< / p>
Regex regex = new Regex("(?<=\")SomeWord[^\"]*");
或者即使您想从结果中排除“SomeWord”:
Regex regex = new Regex("(?<=\"SomeWord)[^\"]*");
这应该为myMatchedStrings
留下你的模式列表,只要模式以双引号开头和结尾并以“SomeWord”开头,但你可以根据需要进行调整。
答案 2 :(得分:0)
好吧,您可以反复使用IndexOf
(使用带startIndex
参数的重载)和Substring
,也可以使用正则表达式。
在IndexOf
案例中,您只需搜索"SomeWord
,然后找到结束语,子串并重复。
正则表达式看起来像这样:
\"(?<Inside>SomeWord[^\"]*)\"
答案 3 :(得分:0)
var matches = TheLongString.Split('')。Where(p =&gt; p.StartsWith(“SomeWord”));
答案 4 :(得分:0)
我认为您需要自定义分割功能。如果您的SomeWords不包含任何空格,@ Sudhakar的answer应该有效。但如果确实如此,你可以使用这样的扩展方法:
public static string[] SplitBy(this string source,char separator)
{
var chars = source.ToCharArray();
var temp = new List<char>();
var words = new List<string>();
bool splitControl = false;
for (int i = 0; i < chars.Length; i++)
{
if (chars[i] == separator && !splitControl)
{
splitControl = true;
continue;
}
else if (chars[i] == separator && splitControl)
{
words.Add(new string(temp.ToArray()));
temp.Clear();
splitControl = false;
continue;
}
if(splitControl) temp.Add(chars[i]);
}
if(temp.Any()) words.Add(new string(temp.ToArray()));
return words.ToArray();
}
此函数返回由双引号括起的所有单词。例如:
string TheLongString = "Lorem ipsum \"SomeWordOne\" dolor sit \"SomeWordTwo\" amet";
var result = TheLongString.SplitBy('"');
这将返回SomeWordOne
和SomeWordTwo
。如果您想过滤返回的结果,只需使用LINQ
:
var result = TheLongString.SplitBy('"').Where(x => x.StartsWith("SomeWord"));