请给我提供一个正则表达式

本文关键字:一个 正则表达式 | 更新日期: 2023-09-27 17:50:12

请帮我找一个正则表达式来解析这样的数据:

'EBB112'  '0 23923 12272 7'    Carrots            'C' 'O' 'A' 'B' 'C'  '12/128ml'     '$9.65'       '$0.80'
'EBB211'  '0 23923 12266 6'   'Vegetables & Turkey'    'C' 'O' 'A' 'B' 'C'     '12/128ml'     '$9.65'       '$0.80'

我有这11个字段(在单引号中显示),我需要逐个字段解析它们,并将它们保存到.csv文件中。有超过3000条这样的行。

任何帮助将是非常感激的。由于

请给我提供一个正则表达式

我不建议你自己找出一个正则表达式-尝试使用一个合适的库来处理这样的东西。

好好看看FileHelpers——这是一个很棒的,免费的 c#库,可以处理任何类型的分隔符(例如CSV,制表符分隔符)或固定宽度的导入文件。

您基本上在表示数据的类中定义导入文件的结构(类似于:我不知道您的字段被称为什么-所以我只是猜测:-)

using System;
using FileHelpers;
namespace ReadDataFromFile
{
    [DelimitedRecord(" ")] 
    public class DataClass
    {
        [FieldQuoted('''', QuoteMode.OptionalForBoth)]
        public string EbbField;
        [FieldQuoted('''', QuoteMode.OptionalForBoth)]
        public string CompoundField;
        [FieldQuoted('''', QuoteMode.OptionalForBoth)]
        public string VegiField;
        [FieldQuoted('''', QuoteMode.OptionalForBoth)]
        public string C1Field;
        [FieldQuoted('''', QuoteMode.OptionalForBoth)]
        public string O1Field;
        [FieldQuoted('''', QuoteMode.OptionalForBoth)]
        public string A1Field;
        [FieldQuoted('''', QuoteMode.OptionalForBoth)]
        public string B1Field;
        [FieldQuoted('''', QuoteMode.OptionalForBoth)]
        public string C2Field;
        [FieldQuoted('''', QuoteMode.OptionalForBoth)]
        public string MlField;
        [FieldQuoted('''', QuoteMode.OptionalForBoth)]
        public string DollarField1;
        [FieldQuoted('''', QuoteMode.OptionalForBoth)]
        public string DollarField2;
    }
}

,然后FileHelpers库为你处理剩下的一切:

using FileHelpers;
...
  FileHelperEngine engine = new FileHelperEngine(typeof(DataClass)); 
  DataClass[] res = engine.ReadFile(@"D:'test.data") as DataClass[]; 

现在,您的数组res包含数据文件中的每行一个条目-非常漂亮!

使用text2re,一个免费的基于web的"regex by example"生成器。

您可以使用' '来分割字符串。

var array = Regex.Split(line.Substring(1, line.Length - 2), "' '");

我已经删除了第一个和最后一个字符,因为它们不会被split方法删除。

从这个开始

system.text.regularexpressions.regex.matches(Str,@""''(.*?)''"))

这将抓取单引号之间的所有内容,但您需要查看每个匹配项,并且这不会处理嵌套分隔符或其他类似废话的奇怪情况。

(? ?) ' s (? ?) ' s (? ?) ' s (? ?) ' s (? ?) ' s (? ?) ' s (? ?) ' s (? ?) ' s (? ?) ' s (? ?) ' s ('?.*'?)

我认为('?.'?)基本上是指一组以'开始,以'结束的字符。然后任意数量的's或者简单地说,空白空间

我可能错了

试试这个(这不会处理数据中的单引号):

string[] entries = 
    { 
        "'EBB112'        '0 23923 12272 7'    'Carrots'            'C' 'O' 'A' 'B' 'C'     '12/128ml'     '$9.65'       '$0.80'",
        "'EBB211'  '0 23923 12266 6'   'Vegetables & Turkey'    'C' 'O' 'A' 'B' 'C'     '12/128ml'     '$9.65'       '$0.80' "
    };
    var newEntries = entries.Select(a=> Regex.Replace(a, "'''s+'", "','")).ToList();
    newEntries.ForEach(
        a=> <YOUR_FILE_STREAM>.WriteLine(a)
    );

在我看来,你不需要正则表达式。

分行…去掉第一个和最后一个单引号,并用字符串"' '"

分隔

//编辑:

啊……这些空格不久前不存在;-)

有"胡萝卜"的那行(没有单引号的字段)让这有点痛苦

让我们在所有行上尝试这个正则表达式作为分割标记:

/‘' W +/

忽略结果中的空字段,并标记所有不产生11个非空字段的行以供进一步处理…

相关文章: