提取字符串 X 和字符串 Y 之间的字符串
本文关键字:字符串 之间 提取 | 更新日期: 2023-09-27 18:32:19
这里也有类似的问题。在这个问题中,X恰好是(
,Y碰巧是)
。我正在寻找类似的东西
public string GetStringBetweenStrings(string Source, string leftString, string rightString)
{
// implementation
Return middlePart;
}
因此,当我调用该方法时:
var test = GetStringBetweenStrings("Hello World this is a test","World","test");
// then test = " this is a ";
如何构建该函数
在同一个链接的问题中,你有一个更灵活的答案,适用于所有字符串,修改如下:
public string GetStringBetweenStrings(string source, string leftString, string rightString)
{
int start = source.IndexOf(leftString); // assume != -1
int end = source.IndexOf(rightString); // assume != -1 and >= start
if (start == -1 || end == -1 || end < start) return String.Empty;
return source.Substring(start + leftString.Length, end - start - rightString.Length - 1)
}
这假定这两个字符串都包含在源字符串中。如果其中任何一个不是,你想要什么行为?或者如果开始是在结束之后?
根据@Jack的强制性正则表达式版本,但更新为功能:
public string GetStringBetweenStrings(string source, string leftString, string rightString)
{
return Regex.Match(source, String.Format(@"(?<={0})(.*)(?={1})",
Regex.Escape(leftString),
Regex.Escape(rightString)))
.Captures[0].Value;
}
(?<=World).*(?=test)
http://regexr.com?30ph4
这是一个正则表达式解决方案。 在构建正则表达式模式时,将 World
和 test
替换为字符串变量。
使用 IndexOf 函数查找这两个字符串。然后使用子字符串提取您需要的内容。
IndexOf
是最直接的。确保将开头偏移到超过第一个字符串。我还添加了一些(未经测试的)代码来处理左/右是否可以重叠。
public string GetStringBetweenStrings(string Source, string leftString, string rightString)
{
var left = Source.IndexOf(leftString);
var right = Source.IndexOf(rightString);
while (right > -1 && left + leftString.Length >= right)
{
right = Source.IndexOf(rightString, right + 1);
}
if (left > -1 || right > -1 || left < right)
return null;
var start = left + leftString.Length;
var end = right;
return Source.Substring(start, end - start);
}