C#如何检索字符串中的某个文本?

时间:2010-12-13 07:26:06

标签: c# string text

有谁知道如何从主字符串中检索短句?是否需要使用正则表达式?

我正在尝试检索文本“Thu Dec 9 05:12:42 2010”这是从主要字符串“LastWrite Time Thu Dec 9 05:12:42 2010(UTC)”的时间,这是在“Time”之后“和之前”(UTC)“。

我也是C#的新手,很抱歉这个简单的问题。

请问有人可以建议或展示一些可用于检索文本的C#方法吗?谢谢!

7 个答案:

答案 0 :(得分:3)

您可以使用正则表达式:

Match match = Regex.Match(text, @"Time (.*?)\(UTC\)");

然后,您可以从match.Groups[1].Value获取所需的子字符串。

答案 1 :(得分:1)

使用System.String.SubstringSystem.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”。