提取与每个字符串开头的模式匹配的字符串列表
本文关键字:字符串 模式匹配 列表 开头 提取 | 更新日期: 2023-09-27 17:51:05
我有一个很长的字符串,我想从中提取与每个字符串开头的模式匹配的字符串。例如,假设我有:
string TheLongString = Lorem ipsum "SomeWordOne" dolor sit "SomeWordTwo" amet;
如何从这个字符串中提取所有以引号开头的字符串?例如,在本例中,列表应该包含"SomeWordOne"
和"SomeWordTwo"
。
假设您正在搜索的模式不是单个单词(kd)。),您可以使用Regex匹配来做您想做的事情:
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来查找你的开始引号,但它实际上不会显示在结果中:
Regex regex = new Regex("(?<='")SomeWord[^'"]*");
或者即使你想从结果中排除"SomeWord":
Regex regex = new Regex("(?<='"SomeWord)[^'"]*");
这应该留下myMatchedStrings
与你的模式的列表,只要模式开始和结束双引号,并以"SomeWord"开始,但你可以根据需要调整
第一步:您需要使用string.Split()
方法基于Space
分隔符对字符串进行split
。
步骤2:遍历所有单词,并使用string.StartsWith()
方法识别是否有以字符串"SomeWord
开头的单词。如果有,那么将它添加到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);
}
EDIT:在注释中指出,如果您的someword
包含空格,那么上述方法不适合
您可以重复使用IndexOf
(使用带有startIndex
参数的重载)和Substring
,或者您可以使用正则表达式。
在IndexOf
的情况下,您只需搜索"SomeWord
,然后找到一个结束引号,子字符串,并重复。
正则表达式看起来像这样:
'"(?<Inside>SomeWord[^'"]*)'"
var matches =长字符串。(' ')。Where(p => p. startswith ("SomeWord"));
我认为你需要一个自定义的拆分函数。@Sudhakar的答案应该有效,如果你的SomeWords不包含任何空格。但是如果是这样的话,你可以使用如下的扩展方法:
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"));