请给我提供一个正则表达式
本文关键字:一个 正则表达式 | 更新日期: 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个非空字段的行以供进一步处理…