REGEX-匹配需要'$',但这也意味着每行都匹配,还有其他解决方案吗?

时间:2018-08-18 15:12:58

标签: regex preg-match

我有一个如下所示的正则表达式:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;


namespace ConsoleApplication1
{
    public class Program
    {
        private static void Main()
        {
            List<List<string>> data = new List<List<string>>() {
                new List<string>() { "Name", "Age", "Weight"},
                new List<string>() { "John", "33", "180"},
                new List<string>() { "Mary", "32", "125"},
                new List<string>() { "Harry", "40", "200"}
            };

            DataTable dt = new DataTable();
            for (int i = 0; i < data.Count; i++)
            {
                if (i == 0)
                {
                    foreach (string col in data[i])
                    {
                        dt.Columns.Add(col);
                    }
                }
                else
                {
                    dt.Rows.Add(data[i].ToArray());
                }
            }

        }
    }

}

“ C”在这里代表Constant,它们始终是相同的。它们之间的含义每次都是不同的(有时什么也没有/空格。请在此处查看我的工作示例!

ssllabs test

这匹配来自

的任何内容
((C1)(.*?))?((C2)(.*?))?((C3)(.*?))?((C4)(.*?))?(\.zip|$)

没有扩展名的东西:

C1 Anything C2 Anything C3 Anything C4 Anything.zip
or
C3 Anything C4 Anything.zip

问题是,目前我必须以C1 Anything C4 Anything 结尾REGEX,以使(\.zip|$)文件扩展名是可选的(因为某些文件将是目录)。不幸的是,每次都匹配“ Nothing”。

是否有一种方法可以停止第13组与每行末尾的匹配,同时仍保持该组结构?您可以在我的工作示例中看到这些组。这不是我以前的问题的重复,只是我试图改进此REGEX以支持不带扩展名的目录和文件的延续。我真的很感谢你们给我的帮助,没有您,我不会走那么远!

非常感谢!

1 个答案:

答案 0 :(得分:0)

您已打开MULTILINE标志(即“ m”),这也使$匹配换行符。

要使.zip最后是可选的,请使用以下命令结束正则表达式:

(\.zip)?

代替(\.zip|$)

为了不与空字符串匹配,请添加以下内容:

^(?!$)...your regex here...(\.zip)?