2015-12-28 3 views
1

Я пытаюсь удалить текст между двумя тегами [&]Удалить текст между двумя тегами

[13:00:00] 

Я хочу удалить 13:00:00 от [] тегов. Это не одно и то же число. Его всегда время суток так, только Целое и: символы.

Кто-нибудь может мне помочь?

ОБНОВЛЕНИЕ: Я забыл что-то сказать. Время (13:00:00) было выбрано из файла журнала. Похоже, что:

[10:56:49] [Client thread/ERROR]: Item entity 26367127 has no item?! 
[10:57:25] [Dbutant] misterflo13 : ils coute chere les enchent aura de feu et T2 du spawn??* 
[10:57:35] [Amateur] firebow ?.SkyLegend.? : ouai 0 
[10:57:38] [Novice] iPasteque : ils sont gratuit me 
[10:57:41] [Novice] iPasteque : ils sont gratuit mec * 
[10:57:46] [Dbutant] misterflo13 : on ma dit k'ils etait payent :o 
[10:57:57] [Novice] iPasteque : on t'a mytho alors 

Игнорируйте другой текст я Juste хочу, чтобы удалить время между [&] (необходимо выглядит как [] Время между обновляется каждый второй [&]

+0

Пожалуйста, см мой обновленный анс wer –

+0

Я обновил мой для многострочной тоже. –

ответ

0

Это еще одна возможность использования Regex:

Public Function ReplaceTime(ByVal Input As String) As String 
    Dim m As Match = Regex.Match(Input, "(\[)(\d{1,2}\:\d{1,2}(\:\d{1,2})?)(\])(.+)") 
    Return m.Groups(1).Value & m.Groups(4).Value & m.Groups(5).Value 
End Function 

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

Я также позвонил, чтобы сделать это, например, 13:47, а также 13:47:12.

Тест: http://ideone.com/yogWfD

(EDIT) Multiline пример:

Вы можете совместить это с File.ReadAllLines() (если это то, что вы предпочитаете) и For цикл, чтобы сделать замену.

Public Function ReplaceTimeMultiline(ByVal TextLines() As String) As String 
    For x = 0 To TextLines.Length - 1 
     TextLines(x) = ReplaceTime(TextLines(x)) 
    Next 
    Return String.Join(Environment.NewLine, TextLines) 
End Function 

Над использования коды:

Dim FinalT As String = ReplaceTimeMultiline(File.ReadAllLines(<file path here>)) 

Еще один многострочный пример:

Public Function ReplaceTimeMultiline(ByVal Input As String) As String 
    Dim ReturnString As String = "" 
    Dim Parts() As String = Input.Split(Environment.NewLine) 
    For x = 0 To Parts.Length - 1 
     ReturnString &= ReplaceTime(Parts(x)) & If(x < (Parts.Length - 1), Environment.NewLine, "") 
    Next 
    Return ReturnString 
End Function 

Multiline тест: http://ideone.com/nKZQHm

+0

Посмотрите, я сделал обновление для моего сообщения. – ZitroTech

+0

Это работает, но только для 1 линии. Это показывает только первую строку текстового файла. – ZitroTech

+0

не работает. Текст всегда случайный, поэтому я не могу писать для примера, «[13:11:34] test» в моем коде cuz Тест прошел случайно. – ZitroTech

1

Это.. выглядит как ваш журнал имеет определенный формат а вы, кажется, хотите избавиться от времени и хранить всю другую информацию Ok -.. читать комментарии

Я не проверял, но он должен работать

' Read log 
Dim logLines() As String = File.ReadAllLines("File_path") 
If logLines.Length = 0 Then Return 
' prepare array to fill sliced data 
Dim lines(logLines.Length - 1) As String 

For i As Integer = 0 To logLines.Count - 1 
    ' just cut off time part and add empty brackets for each line 
    lines(i) = "[]" & logLines(i).Substring(10) 
Next 

Что вы видите выше - если вы знаете, что ваш файл поставляется в определенном формате, просто используйте положение в строке, где его отключить.

Примечание: Код выше может быть сделано в 1 строку с помощью LINQ

Если вы действительно хотите получить данные из него, используйте IndexOf. Поскольку вы ищете первое вхождение «[» или «]», просто использовать начальный индекс «0»

' get position of open bracket in string 
Dim openBracketPos As Integer = myString.IndexOf("[", 0, StringComparison.OrdinalIgnoreCase) 
' get position of close bracket in string 
Dim closeBracketPos As Integer = myString.IndexOf("]", 0, StringComparison.OrdinalIgnoreCase) 

' get string between open and close bracket 
Dim data As String = myString.Substring(openBracketPos + 1, closeBracketPos - 1) 
+0

Журнал является алериадой, которую читает StreamReader. Я конвертирую в String. Я все-таки делаю свой код? (чтобы прочитать файл журнала) И я не хочу получать данные между [&], но удалять его. – ZitroTech

+0

@ZitroTech Вам не нужно использовать 'StreamReader'. 'File.ReadAllLines' уже обертывает все это для вас. Это намного проще в использовании. Вы загружаете свой массив и конвертируете свои данные в формат, который хотите увидеть. Это будет слишком сложно ** [излишне] **, чтобы прочитать некоторые символы и пропустить их, если это дата. Послушайте, я просто запрограммировал все это в 6 строках, и я могу сделать это 3 строки –

+0

Я попробую с File.ReadAllLines, но мне нужно будет преобразовать String() в String, и я не знаю, как ... – ZitroTech

0

Если ваша проблема заключается в удалении числовых строк в формате 99:99:99, которые появляются внутри [ ], Я бы сделал:

// Предполагая, что вы хотите заменить цифровую строку [......] пустым []. Если вы хотите, чтобы полностью удалить тег, просто замените String.Empty

Вот демо (в C#, не VB, но вы получите точку (вам нужно регулярное выражение, а не синтаксис в любом случае)

List<string> list = new List<string> 
    { 
     "[13:00:00]", 
     "[4:5:0]", 
     "[5d2hu2d]", 
     "[1:1:1000]", 
     "[1:00:00]", 
     "[512341]" 
    }; 

    string s = string.Join("\n", list); 
    Console.WriteLine("Original input string:"); 
    Console.WriteLine(s); 

    Regex r = new Regex(@"\[\d{1,2}?:\d{1,2}?:\d{1,2}?\]"); 
    foreach (Match m in r.Matches(s)) 
    { 
     Console.WriteLine("{0} is a match.", m.Value); 
    } 

    Console.WriteLine(); 
    Console.WriteLine("String with occurrences replaced with an empty string:"); 
    Console.WriteLine(r.Replace(s, string.Empty).Trim()); 

enter image description here

Смежные вопросы