有谁知道如何从主字符串中检索短句?是否需要使用正则表达式?
我正在尝试检索文本“Thu Dec 9 05:12:42 2010”这是从主要字符串“LastWrite Time Thu Dec 9 05:12:42 2010(UTC)”的时间,这是在“Time”之后“和之前”(UTC)“。
我也是C#的新手,很抱歉这个简单的问题。
请问有人可以建议或展示一些可用于检索文本的C#方法吗?谢谢!
答案 0 :(得分:3)
您可以使用正则表达式:
Match match = Regex.Match(text, @"Time (.*?)\(UTC\)");
然后,您可以从match.Groups[1].Value
获取所需的子字符串。
答案 1 :(得分:1)
使用System.String.Substring
和System.String.Length
方法。
var logTime = "LastWrite Time Thu Dec 9 05:12:42 2010 (UTC)";
logTime = logTime.Substring("LastWrite Time ".Length);
logTime = logTime.Substring(0, logTime.Length - " (UTC)".Length);
这可以让你接近你想要的东西。
答案 2 :(得分:1)
您可以使用正则表达式(正则表达式),但很难理解。除非你已经习惯了,否则大多数人认为它们难以创造。如果你喜欢正则表达式,你可以研究在C#中处理正则表达式的Regex class。
但是,您尝试使用String类上的常用方法也可以做到。查看它,看看你可以使用哪些方法。
主要是你使用字符串类'方法的逻辑是确定你的句子中是否有一些模式。尝试查找围绕要提取的数据/时间字符串(开始和结束)的常用元素。然后使用Substring(...)
方法。或其他方法。它可以通过多种方式完成。
答案 3 :(得分:0)
以下代码应该为您提供所需内容。它不是一个灵活的解决方案,只适用于这种情况:
String value = "LastWrite Time Thu Dec 9 05:12:42 2010 (UTC)";
String newValue = value.Replace("LastWrite Time", "").Replace("(UTC)", "").Trim();
为了获得更大的灵活性,请使用Regular Expressions
。
答案 4 :(得分:0)
试试这个, 如果文本仅在字符串变量中,则可以使用SubString()方法检索字符串。 例如:
String str =“LastWrite Time Thu Dec 9 2010年5月12日(UTC)“; str.substring(15,23);
将于2010年12月9日星期五05:12:42返回。
答案 5 :(得分:0)
您的问题基本上是字符串解析。
最简单的方法是在字符串本身上使用IndexOf和Substring方法。这仅适用于非常简单的场景。请记住,字符串是不可变的,这些函数将始终返回新的字符串,永远不会修改原始字符串。
下一级是使用正则表达式,这将处理稍微复杂的场景。
最好的方法是使用完整的词法分析工具,这可能对您上面提到的场景有些过分。仍然值得研究只是为了好玩。
答案 6 :(得分:0)
这是一个相当常见的问题,因此您应该使用灵活的“Between”方法扩展字符串类。 首先,您必须定义扩展类:
public static class StringExtensions
{
/// <summary>
/// Returnes a substring located between a leading substring (head) and following substring(tail).
/// Return null if head or tail are not part of this string.
/// </summary>
/// <param name="mainString"></param>
/// <param name="head">leading substring</param>
/// <param name="tail">following substring</param>
/// <returns>ubstring located between head and tail</returns>
public static String Between(this string mainString, string head, string tail)
{
int HeadPosition;
int TailPosition;
int ResultPosition;
int ResultLenght;
//test if mainstring contains head and tail
if (!mainString.Contains(head) && mainString.Contains(tail))
{
return null;
}
HeadPosition = mainString.IndexOf(head);
TailPosition = mainString.IndexOf(tail);
ResultPosition = HeadPosition + head.Length;
ResultLenght = TailPosition - ResultPosition;
return mainString.Substring(ResultPosition, ResultLenght);
}
}
然后你要做的就是在任何字符串上调用new方法。
var logTime = "LastWrite Time Thu Dec 9 05:12:42 2010 (UTC)";
logTime = logTime.Between("Time","(UTC)").Trim();
请注意,只有使用您在StringExtensions中定义的命名空间时才能访问“Between”。