我有一个字符串:
"super exemple of string key : text I want to keep - end of my string"
Run Code Online (Sandbox Code Playgroud)
我想保留在"key : "和之间的字符串" - ".我怎样才能做到这一点?我必须使用正则表达式,还是可以用其他方式进行?
Dmi*_*nko 142
也许,一个好方法就是剪切一个子字符串:
String St = "super exemple of string key : text I want to keep - end of my string";
int pFrom = St.IndexOf("key : ") + "key : ".Length;
int pTo = St.LastIndexOf(" - ");
String result = St.Substring(pFrom, pTo - pFrom);
Run Code Online (Sandbox Code Playgroud)
I4V*_*I4V 33
string input = "super exemple of string key : text I want to keep - end of my string";
var match = Regex.Match(input, @"key : (.+?)-").Groups[1].Value;
Run Code Online (Sandbox Code Playgroud)
或只是字符串操作
var start = input.IndexOf("key : ") + 6;
var match2 = input.Substring(start, input.IndexOf("-") - start);
Run Code Online (Sandbox Code Playgroud)
Ani*_*dha 28
你可以在没有正则表达式的情况下完成
input.Split(new string[] {"key :"},StringSplitOptions.None)[1]
.Split('-')[0]
.Trim();
Run Code Online (Sandbox Code Playgroud)
Cha*_*ion 14
根据您希望实现的强大/灵活程度,这实际上有点棘手.这是我使用的实现:
public static class StringExtensions {
/// <summary>
/// takes a substring between two anchor strings (or the end of the string if that anchor is null)
/// </summary>
/// <param name="this">a string</param>
/// <param name="from">an optional string to search after</param>
/// <param name="until">an optional string to search before</param>
/// <param name="comparison">an optional comparison for the search</param>
/// <returns>a substring based on the search</returns>
public static string Substring(this string @this, string from = null, string until = null, StringComparison comparison = StringComparison.InvariantCulture)
{
var fromLength = (from ?? string.Empty).Length;
var startIndex = !string.IsNullOrEmpty(from)
? @this.IndexOf(from, comparison) + fromLength
: 0;
if (startIndex < fromLength) { throw new ArgumentException("from: Failed to find an instance of the first anchor"); }
var endIndex = !string.IsNullOrEmpty(until)
? @this.IndexOf(until, startIndex, comparison)
: @this.Length;
if (endIndex < 0) { throw new ArgumentException("until: Failed to find an instance of the last anchor"); }
var subString = @this.Substring(startIndex, endIndex - startIndex);
return subString;
}
}
// usage:
var between = "a - to keep x more stuff".Substring(from: "-", until: "x");
// returns " to keep "
Run Code Online (Sandbox Code Playgroud)
Vij*_*ana 12
这是我如何做到这一点的方式
public string Between(string STR , string FirstString, string LastString)
{
string FinalString;
int Pos1 = STR.IndexOf(FirstString) + FirstString.Length;
int Pos2 = STR.IndexOf(LastString);
FinalString = STR.Substring(Pos1, Pos2 - Pos1);
return FinalString;
}
Run Code Online (Sandbox Code Playgroud)
小智 11
我认为这有效:
static void Main(string[] args)
{
String text = "One=1,Two=2,ThreeFour=34";
Console.WriteLine(betweenStrings(text, "One=", ",")); // 1
Console.WriteLine(betweenStrings(text, "Two=", ",")); // 2
Console.WriteLine(betweenStrings(text, "ThreeFour=", "")); // 34
Console.ReadKey();
}
public static String betweenStrings(String text, String start, String end)
{
int p1 = text.IndexOf(start) + start.Length;
int p2 = text.IndexOf(end, p1);
if (end == "") return (text.Substring(p1));
else return text.Substring(p1, p2 - p1);
}
Run Code Online (Sandbox Code Playgroud)
Ode*_*ded 10
正则表达式在这里有点过分.
您可以使用string.Split带有string[]分隔符的重载,但这也是过度的.
看看Substring和IndexOf- 前者获取给定的字符串的部分和索引和长度,第二个用于查找内部字符串/字符的索引.
小智 9
在 C# 8.0 及更高版本中,您可以使用范围运算符,..如下所示
var s = "header-THE_TARGET_STRING.7z";
var from = s.IndexOf("-") + "-".Length;
var to = s.IndexOf(".7z");
var versionString = s[from..to]; // THE_TARGET_STRING
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅文档。
可行的LINQ解决方案:
string str = "super exemple of string key : text I want to keep - end of my string";
string res = new string(str.SkipWhile(c => c != ':')
.Skip(1)
.TakeWhile(c => c != '-')
.ToArray()).Trim();
Console.WriteLine(res); // text I want to keep
Run Code Online (Sandbox Code Playgroud)
小智 5
string str="super exemple of string key : text I want to keep - end of my string";
int startIndex = str.IndexOf("key") + "key".Length;
int endIndex = str.IndexOf("-");
string newString = str.Substring(startIndex, endIndex - startIndex);
Run Code Online (Sandbox Code Playgroud)
或者,正则表达式.
using System.Text.RegularExpressions;
...
var value =
Regex.Match(
"super exemple of string key : text I want to keep - end of my string",
"key : (.*) - ")
.Groups[1].Value;
Run Code Online (Sandbox Code Playgroud)
用一个运行的例子.
你可以决定它是否过度杀伤.
作为一种经过验证的扩展方法
using System.Text.RegularExpressions;
public class Test
{
public static void Main()
{
var value =
"super exemple of string key : text I want to keep - end of my string"
.Between(
"key : ",
" - ");
Console.WriteLine(value);
}
}
public static class Ext
{
static string Between(this string source, string left, string right)
{
return Regex.Match(
source,
string.Format("{0}(.*){1}", left, right))
.Groups[1].Value;
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
由于:和和-是唯一的,因此您可以使用:
string input;
string output;
input = "super example of string key : text I want to keep - end of my string";
output = input.Split(new char[] { ':', '-' })[1];
Run Code Online (Sandbox Code Playgroud)
我使用了 Vijay Singh Rana 的代码片段,它基本上完成了这项工作。但是如果firstString确实已经包含lastString. 我想要的是从 JSON 响应中提取 access_token(未加载 JSON 解析器)。我的firstString过去\"access_token\": \"和我的lastString过去\"。我最后做了一点修改
string Between(string str, string firstString, string lastString)
{
int pos1 = str.IndexOf(firstString) + firstString.Length;
int pos2 = str.Substring(pos1).IndexOf(lastString);
return str.Substring(pos1, pos2);
}
Run Code Online (Sandbox Code Playgroud)