我有一个如下所示的正则表达式:
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,它们始终是相同的。它们之间的含义每次都是不同的(有时什么也没有/空格。请在此处查看我的工作示例!
这匹配来自
的任何内容((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以支持不带扩展名的目录和文件的延续。我真的很感谢你们给我的帮助,没有您,我不会走那么远!
非常感谢!
答案 0 :(得分:0)
您已打开MULTILINE标志(即“ m”),这也使$
匹配换行符。
要使.zip
最后是可选的,请使用以下命令结束正则表达式:
(\.zip)?
代替(\.zip|$)
。
为了不与空字符串匹配,请添加以下内容:
^(?!$)...your regex here...(\.zip)?