【问题标题】:C# Programming How to not filter our spaces within directories using Regular expression?C# 编程如何不使用正则表达式过滤目录中的空间?
【发布时间】:2010-11-22 11:10:06
【问题描述】:

我有一个程序,它利用标记化和正则表达式从日志文件字符串中过滤掉空格('')和“,”。

但是,由于日志文件字符串目录中存在空格,所以有人可以就我可以使用的正则表达式提供一些建议吗?谢谢!

*由于日期、时间和内容必须标记化,请不要有空格和逗号!不要假设我放置这些空间是为了好玩并开始投反对票!喜欢某人。

日志文本文件的这样一个字符串行是:

Thu Mar 02 1995 21:31:00,2245107,m...,r/rrwxrwxrwx,0,0,8349-128-3,C:/Program Files/AccessData/AccessData Forensic Toolkit/Program/wordnet/Adj.dat

程序的结果输出将是"

Thu
Mar
02
1995
21:31:00
2245107
m...
r/rrwxrwxrwx
0
0
8349-128-3
C:/Program
Files/AccessData/AccessData
Forensic
Toolkit/Program/wordnet/Adj.dat

因此,“C:/Program Files/AccessData/AccessData Forensic Toolkit/Program/wordnet/Adj.dat”由于空格正则表达式而被分隔。

程序代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.IO;
using System.Text.RegularExpressions;


namespace Testing
{
class Program
{
    static void Main(string[] args)
    {

      String value = "Thu Mar 02 1995 21:31:00,2245107,m...,r/rrwxrwxrwx,0,0,8349-128-
      3,C:/Program Files/AccessData/AccessData Forensic 
      Toolkit/Program/wordnet/Adj.dat";
        //
        // Split the string on line breaks.
        // ... The return value from Split is a string[] array.
        //

        //foreach (String r in lines)
        //{
            String rex = @"[\s,]";

            String[] token = Regex.Split(value, rex);

            foreach (String line in token)
            {
                Console.WriteLine(line);
            }
        //}
    }
}
}

【问题讨论】:

  • 你为什么用空格分割?看起来逗号是该示例行中唯一的分隔符。 (文件名中可以​​包含逗号吗?)
  • 老兄...这很明显,因为涉及到时间?如上所述,它是一个 LOG TEXT FILE STRING,所以显然是一个 MACtimes 日志文件。 MACtimes 是一个基于时间轴的取证日志。

标签: c# regex whitespace tokenize


【解决方案1】:

不要在空格上拆分,它们是值的一部分。

string value = "Thu Mar 02 1995 21:31:00,2245107,m...,r/rrwxrwxrwx,0,0,8349-128-3,C:/Program Files/AccessData/AccessData Forensic Toolkit/Program/wordnet/Adj.dat";
string[] token = value.Split(',');
foreach (String line in token) {
  Console.WriteLine(line);
}

如果您希望日期的组成部分作为单独的值,您可以将其拆分为空格:

string[] dateCompent = token[0].Split(' ');

【讨论】:

  • 由于时间、日期和内容的原因,我需要空格和 "," 拆分。你能帮我解决这个问题吗?谢谢。
  • @JavaNoob:首先仅以逗号分隔,然后您可以获取日期和时间值并以空格分隔以获得单独的组件。
  • 是否可以对 1 个正则表达式执行所有各种过滤器?那真的很有帮助。谢谢。
  • 我认为您的回答也可以。谢谢朋友的回答。
【解决方案2】:

如果您必须在单个正则表达式中执行此操作,并且如果您确实要在空格上拆分的唯一实例是在第一项中(即日期字符串),那么你可以这样做

splitArray = Regex.Split(subjectString, @",|(?<=^[^,]*)\s+");

此正则表达式在逗号或空格上拆分,但前提是该空格在字符串之前的某处没有跟在逗号后面。

说明:

,       # match a ,
|       # or
(?<=    # assert that it is possible to match the following before the current position:
 ^      # start of string
 [^,]*  # any number of characters except commas
)       # end of positive lookahead assertion

但请注意,文件名也可能包含逗号(至少它们在那里是合法的 - 它们是否出现在您的数据中只有您可以判断)。 \s+ # 然后匹配一个或多个空白字符

【讨论】:

    猜你喜欢
    • 2021-11-01
    • 1970-01-01
    • 2013-09-23
    • 1970-01-01
    • 2022-12-13
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    相关资源
    最近更新 更多