我试图删除两个标签之间的某些文字[& ]
[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
忽略我想要删除[& ](需要看起来像[]。[&]之间的时间每秒更新一次。
答案 0 :(得分:1)
看起来您的日志具有特定格式。你似乎想摆脱时间并保留所有其他信息。好的 - 阅读评论
我没有测试它,但它应该工作
' 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
您在上面看到的内容 - 如果您知道您的文件采用某种格式,只需使用字符串中的位置将其剪切掉即可。
注意:上面的代码可以使用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)
答案 1 :(得分: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());
答案 2 :(得分: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
。
(编辑)多行示例:
您可以将其与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