C # Как получить определенный текст, расположенный в строке? - PullRequest
2 голосов
/ 13 декабря 2010

Кто-нибудь знает, как получить короткое предложение из основной строки? Обязательно ли использовать регулярные выражения?

Я пытаюсь получить текст «Чт 9 декабря 05:12:42 2010», который является временем из основной строки «Время последней записи Чт 9 декабря 05:12:42 2010 (UTC)», который следует после «Время "и до" (UTC) ".

Я также новичок в C #, так что извините за простой вопрос.

Может кто-нибудь посоветует или покажет некоторые методы C #, которые можно использовать для извлечения текста? Спасибо!

Ответы [ 7 ]

3 голосов
/ 13 декабря 2010

Вы можете использовать регулярное выражение:

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

Затем вы можете получить нужную подстроку из match.Groups[1].Value.

1 голос
/ 13 декабря 2010

Вы можете использовать регулярные выражения (регулярные выражения), но их трудно понять.Большинство людей считают, что их трудно создать, если вы не очень привыкли к ним.Если вы знакомы с регулярными выражениями, вы можете изучить класс Regex , который обрабатывает регулярные выражения в C #.

Однако то, что вы пытаетесь сделать, также возможно с помощью обычных методов на Строка класс.Посмотрите на него и посмотрите, какие методы вы можете использовать.

В основном ваша логика с использованием методов класса string будет заключаться в том, чтобы определить, есть ли у вас какой-либо шаблон в предложениях.Попробуйте найти общие элементы, которые окружают строку данных / времени, которую вы хотите извлечь (начало и конец).Затем используйте метод Substring(...).или другие методы.Это можно сделать несколькими способами.

1 голос
/ 13 декабря 2010

Изучите методы 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);

Это должно приблизить вас к тому, что вы ищете.

0 голосов
/ 13 декабря 2010

Это довольно распространенная проблема, поэтому вы должны расширить строковый класс гибким методом «Между». Сначала вам нужно определить класс расширения:

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);
    }
}

Тогда все, что вам нужно сделать, это вызвать новый метод для любой строки.

var logTime = "LastWrite Time Thu Dec 9 05:12:42 2010 (UTC)";
logTime = logTime.Between("Time","(UTC)").Trim();

Обратите внимание, что «Между» будет доступно только если вы используете пространство имен, в котором вы определили StringExtensions.

0 голосов
/ 13 декабря 2010

Ваша проблема заключается в основном в разборе строк.

Самый простой способ - просто использовать методы IndexOf и Substring для самой строки.Это будет работать только для очень простых сценариев.Просто помните, что строка является неизменной, и эти функции всегда будут возвращать новые строки, никогда не изменяя оригинал.

Следующий уровень - использование регулярных выражений, которые будут обрабатывать несколько более сложные сценарии.

Лучший способ - использовать инструмент полного лексического анализа, который, вероятно, излишним для сценария, который вы представили выше.Все равно стоит заглянуть просто ради удовольствия.

0 голосов
/ 13 декабря 2010

попробуйте, если ваш текст находится только в строковой переменной, вы можете использовать метод SubString () для извлечения строки.Пример:

String str = "Время последней записи в четверг, 9 декабря 05:12:42 2010 (UTC)";str.substring (15,23);

вернет вам Четверг 9 декабря 05:12:42 2010 в результате.

0 голосов
/ 13 декабря 2010

Следующий код должен дать вам то, что вы хотите.Это не гибкое решение, оно будет работать только для этого сценария:

String value = "LastWrite Time Thu Dec 9 05:12:42 2010 (UTC)";

String newValue = value.Replace("LastWrite Time", "").Replace("(UTC)", "").Trim();

Для большей гибкости используйте Regular Expressions.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...