正则表达式从变量中提取 2 个文本

Reg Ex to extract 2 texts from a variable

我需要 2 个单独的正则表达式(.net、c#)来提取值。我不能使用分组。只需要 2 个单独的正则表达式。我试过这个 (?:^|(?:[.!?]\s))(\w+) 但它给了我 6;. Supplier

例如

6. Supplier - Compressors, Drivers & Refrig. Units

第一个正则表达式会给我 Supplier 第二个正则表达式会给我 Compressors, Drivers & Refrig. Units

示例变量是(在我的场景中它们不是这样在一起的)。它们是单独的实例。我需要分离 Regex 的原因是为了在代码中的不同位置评估这个值。

4. Cost/Estimating
6. Supplier - Minor Material: Specialty
6. Supplier - Pressure Vessels & Filters
6. Supplier - Pumps
6. Supplier - Minor Material: Valves
6. Supplier - Minor Material: Specialty
6. Supplier - Other Major Equipment
7. Manufacturing
8. Project Management
9. Order Release (OTR) - Commercial Documents
9. Order Release (OTR) - Hand-Off

您可以将一个正则表达式用于分组:

    string myString = "6. Supplier - Minor Material: Specialty";
    var regexPattern = @"(?<number>\d+)\.\s(?<supplier>\w+)\s-\s(?<product>.+)";
    var matched = Regex.Match(myString, regexPattern);
    if (matched.Success)
    {
        var supplier = matched.Groups["supplier"].Value;
        var product = matched.Groups["product"].Value;
    }

根据您对 Nintex 的要求,您可以尝试以下两个正则表达式,尽管它们远非理想:

匹配数字后的第一个单词(先行和后行):

(?<=\d\.\s).+(?=\s-\s)

匹配破折号后的单词 -(后视)

(?<=\s-\s).+

代码

See regex in use here

^\d+\.[ \t]*([^-\r\n]+?)(?:$|[ \t]*-[ \t]*(.*))

结果

输入

4. Cost/Estimating
6. Supplier - Minor Material: Specialty
6. Supplier - Pressure Vessels & Filters
6. Supplier - Pumps
6. Supplier - Minor Material: Valves
6. Supplier - Minor Material: Specialty
6. Supplier - Other Major Equipment
7. Manufacturing
8. Project Management
9. Order Release (OTR) - Commercial Documents
9. Order Release (OTR) - Hand-Off
6. Supplier - Compressors, Drivers & Refrig. Units

输出

下面的输出显示捕获组 1 由可选的捕获组 2 分隔。每个完整的匹配项由一个新行分隔。

Cost/Estimating

Supplier
Minor Material: Specialty

Supplier
Pressure Vessels & Filters

Supplier
Pumps

Supplier
Minor Material: Valves

Supplier
Minor Material: Specialty

Supplier
Other Major Equipment

Manufacturing

Project Management

Order Release (OTR)
Commercial Documents

Order Release (OTR)
Hand-Off

Supplier
Compressors, Drivers & Refrig. Units

说明

标志 g(全局 - 不要在第一次匹配时停止)和 m(多行 - ^ 匹配每行的开头并且 $匹配每行的末尾)被使用。

  • ^ 在行首声明位置
  • \d+匹配一位或多位数字
  • \.字面上匹配点字符.
  • [ \t]* 匹配任意数量的空格或制表符
  • ([^-\r\n]+?) 捕获集合 -\r\n 中不存在但尽可能少的一个或多个字符到捕获组 1
  • (?:$|[ \t]*-[ \t]*(.*)) 匹配以下任意一项
    • $ 断言行尾的位置
    • [ \t]* 匹配任意数量的空格或制表符
    • -字面上匹配连字符-
    • [ \t]* 匹配任意数量的空格或制表符
    • (.*) 捕获任意次数的任意字符(行终止符除外)到捕获组 2