提取字符串,字符串X和字符串之间ÿ
有在here类似的问题。在那个问题X恰好是(
和Y碰巧是)
。我在寻找类似提取字符串,字符串X和字符串之间ÿ
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;
}
您需要将leftString的长度添加到开头,否则您的子字符串将包含leftString。 – 2012-04-26 21:48:32
好点,更新。 – yamen 2012-04-26 21:49:23
对于正则表达式版本,您可能想要使用。*?作为当前表达将匹配“a或b)或(c或d”从:“(a或b)或(c或d)”而不是“a或b”和“c或d” – jessehouwing 2012-05-01 21:43:52
使用indexOf功能定位两个字符串。然后使用SubString来提取你需要的东西。
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);
}
这对我没有用。也许我做错了什么.... – 2012-04-26 22:35:38
我应该是返回GetStringBetweenStrings(的 “Hello World这个世界,这是一个测试”, “世界”, “测试”);? – 2012-04-26 21:44:29
shoud return'这是' – 2012-04-26 22:36:16