【问题标题】:correct Regex settings or the expression itself正确的正则表达式设置或表达式本身
【发布时间】:2021-05-22 03:14:30
【问题描述】:

我有这样的文字:

"2008/00419 Bir kompresör ARÇELİK ANONİM ŞİRKETİ 2008/00438 Su altı canlı ürün nakil pompası DENİZSAN DENİZCİLİK ANONİM ŞİRKETİ 2008/03300 YAĞLI AĞARTMA TOPRAKLARINDAN YAĞIN VE AĞARTMA TOPRAĞININ GERİ KAZANIM YÖNTEMİ MAYSA YAĞ SANAYİ ANONİM ŞİRKETİ"

我需要将此文本拆分为“数字+文本”记录。像这样:

  1. 2008/00419 Bir kompresör ARÇELİK ANONİM ŞİRKETİ
  2. 2008/00438 Su altı canlı ürün nakil pompası DENİZSAN DENİZCİLİK 匿名 ŞİRKETİ
  3. 2008/03300 YAĞLI AĞARTMA TOPRAKLARINDAN YAĞIN VE AĞARTMA TOPRAKLARINDAN GERİ KAZANIM YÖNTEMİ MAYSA YAĞ SANAYİ ANONİM ŞİRKETİ*

我使用这样的正则表达式:

Regex splitRegex = new Regex(@"(?>(\d{4}\/\d{5}))");

List<string> notes = splitRegex.Split(text).ToList();

但是我得到的结果是这样的:

帮助我选择正确的正则表达式设置或表达式本身。谢谢。

【问题讨论】:

  • 结果有什么问题?这正是我希望通过使用 Split 看到的。
  • 我想在一个条目中查看编号和描述。这样列表包含的不是 6 条记录,而是 3 条。

标签: c# regex list split


【解决方案1】:

没有对此进行测试,但我认为您只是想在您的正则表达式模式中包含非数字部分?

Regex splitRegex = new Regex(@"(?x) # ignore whitespace and comments
    (?<record> # define capturing group
        \d{4} # match 4 digits
        \/ # match forward-slash
        \d{5} # match 5 digits
        [^\d]+ # match following text that is not a digit
    )
");

如果我记得正确调用 Split() ,这将导致每个匹配项之间包含空字符串的数组.. 即。您要拆分的“分隔符”是您要捕获的文本。所以有点尴尬。

我不认为这是一个“分裂”问题。以这种方式调用 Regex.Matches() 并简单地枚举结果会更清楚。伪代码:

foreach (Match m in regex.Matches(inputText))
{
    string record = m.Groups["record"].Value;
    //...
}

【讨论】:

    【解决方案2】:

    问题解决了! 使用这样的正则表达式:

    正则表达式 splitRegex = new Regex(@"(?=\d{4}/\d{5})",RegexOptions.Multiline);

    【讨论】:

      【解决方案3】:

      你可以只使用拆分功能。

      // Split text(assigned str), separated by a space followed by "2" 
                  string[] recordList = str.Split(" 2");
                  Console.WriteLine(recordList[0]);
                  Console.WriteLine("2" + recordList[1]);
                  Console.WriteLine("2" + recordList[2]);
      

      这将返回您想要的输出,只要年份是 2000 年,它将适用于任何其他记录

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-03-04
        • 2015-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-05
        相关资源
        最近更新 更多