C# - 在文本之间取一个字符串
Posted
技术标签:
【中文标题】C# - 在文本之间取一个字符串【英文标题】:C# -Take a string between a text 【发布时间】:2019-11-11 16:35:15 【问题描述】:我在一个列表中有各种字符串:
Ord.cl。 N. 2724 删除 08/11/2019
也可以
Ord.cl。 N. 2725/web del 08/11/2019
我必须获取所有出现在“N”之后的内容。在'del'之前。结果我想要
2724 2725/网络有人可以用 C# 编写代码吗?我知道有子字符串,但也许有更好的方法?
【问题讨论】:
听起来正则表达式是一个完美的工具。 你试过什么?我们可以帮助您解决疑虑,但我们不是来为您编写代码 【参考方案1】:你可以像这样构建一些扩展方法
public string SubstringFromTo(this string input, int from, int to)
return input.Substring(from, (to - from));
public string SubstringFromTo(this string input, string from, string to)
var index1 = input.IndexOf(from) != -1 ? input.IndexOf(from) : 0;
var index2 = input.IndexOf(to) != -1 ? input.IndexOf(to) : (input.Length - 1);
return input.SubstringFromTo(index1, index2);
var asd = " ciao ** come stai ? asdasd".SubstringFromTo("**","?");
结果 = “来吧” //.Trim() 如果你愿意的话
【讨论】:
【参考方案2】:使用正则表达式,你可以这样做:
var m = Regex.Match("Ord.cl. N. 2724 del 08/11/2019", @"(?<=N\.).*?(?=del)");
if (m.Success)
var result = m.Value;
正则表达式的解释:
(?<=N\.)
查找前面的“N”。
.*?
匹配任何字符序列,但尽可能少
(?=del)
寻找尾随的“del”。
【讨论】:
使用 "(?:N\.\s*)(.*?)(?:\s*del)" 并使用第一个捕获组可以避免结果中的空格跨度> 【参考方案3】:如果它总是那么可预测(N.
之前和之后的空格,del
之前和之后的空格),那么它相当简单。使用Substring
和IndexOf
来查找N.
和del
的出现:
var theString = "Ord.cl. N. 2725/web del 08/11/2019";
var start = theString.IndexOf("N. ") + 3;
var length = theString.IndexOf(" del", start) - start;
var partIWant = theString.Substring(start, length).Trim();
Console.WriteLine(partIWant);
这还假设您的字符串中只会出现一次 N.
和 del
。
【讨论】:
【参考方案4】: for (int i = 0; i< list.Count-1; i++)
NDocList.Add(list[i].DocumentiOrigine.Split(new string[] " N. " , StringSplitOptions.None)[1]
.Split()[0]
.Trim());
以某种方式解决了这个问题。
【讨论】:
以上是关于C# - 在文本之间取一个字符串的主要内容,如果未能解决你的问题,请参考以下文章
C# (.net) RegEx.Match 换行符之间的子字符串 - 使用换行符作为正向超前限制