C#正则表达式过滤器问题

C#正则表达式过滤器问题,c#,.net,regex,winforms,C#,.net,Regex,Winforms,此时此刻,我在早些时候发布了一些关于Regex的问题。它让我头疼,我查阅了大量关于如何使用regex的文档,但我仍然无法找到它。我不想再浪费6个小时来过滤简单的(我想)表达式 因此,基本上我要做的是过滤所有以HTML扩展名结尾的文件类型(星号“*”来自Winforms选项卡控件,表示文件已被修改。我在IgnoreCase中也需要它们: .html, .htm, .shtml, .shtm, .xhtml .html*, .htm*, .shtml*, .shtm*, .xhtml* 同时过滤一

此时此刻,我在早些时候发布了一些关于
Regex
的问题。它让我头疼,我查阅了大量关于如何使用regex的文档,但我仍然无法找到它。我不想再浪费6个小时来过滤简单的(我想)表达式

因此,基本上我要做的是过滤所有以HTML扩展名结尾的文件类型(星号“*”来自Winforms选项卡控件,表示文件已被修改。我在
IgnoreCase
中也需要它们:

.html, .htm, .shtml, .shtm, .xhtml
.html*, .htm*, .shtml*, .shtm*, .xhtml*
同时过滤一些CSS文件:

.css
.css*
和一些SQL文件:

.sql, .ddl, .dml
.sql*, .ddl*, .dml*
我前面的问题得到了筛选Python文件的答案:

.py, .py, .pyi, .pyx, .pyw
Expression would be: \.py[3ixw]?\*?$
但是当我试图从上面的表达式学习时,我总是只打开一个
.xhtml
,其余的都无效

对于HTML表达式,我现在有这样一个:
\.HTML |.HTML |.shtml |.shtml |.xhtml\*?$
带有
RegexOptions.IgnoreCase
。但是输出将只允许
.xhtml
区分大小写的..HTML文件.htm和其他文件不匹配。我非常感谢您对每个表达式的解释德(所以我再也不用问同样的问题了)


谢谢。

对于这种情况,您可以从一个简单的正则表达式开始,它可以逐步简化为一个好的正则表达式:

在C#中,对于IgnoreCase,这基本上是

Regex myRegex = new Regex("PATTERN", RegexOptions.IgnoreCase);
现在的模式是:最简单的模式是将所有有效结果与OR+转义(如果可能)连接起来:

使用
.html*
时,您的意思是
.html
+任何东西,在正则表达式中写为
*
(任何字符,0-无限次)

\.html|\.htm|\.shtml|\.shtm|\.xhtml|\.html.*|\.htm.*|\.shtml.*|\.shtm.*|\.xhtml.*
然后,您可以将所有重复模式组合在一起。所有文件结尾都以点开头,并且可能有可选的结尾,
结尾。*
始终包含
结尾

\.(html|htm|shtml|shtm|xhtml).*
然后,我经常看到
htm
,所以我尝试提取它。将
htm
前后所有可能的字符一起提取(
表示0或1个字符):

而且,我总是检查它是否还在工作


这样,您还可以得到其他两个正则表达式,并最终将它们合并在一起。

对于这种情况,您可以从一个简单的正则表达式开始,该正则表达式可以逐步简化为一个好的正则表达式:

在C#中,对于IgnoreCase,这基本上是

Regex myRegex = new Regex("PATTERN", RegexOptions.IgnoreCase);
现在的模式是:最简单的模式是将所有有效结果与OR+转义(如果可能)连接起来:

使用
.html*
时,您的意思是
.html
+任何东西,在正则表达式中写为
*
(任何字符,0-无限次)

\.html|\.htm|\.shtml|\.shtm|\.xhtml|\.html.*|\.htm.*|\.shtml.*|\.shtm.*|\.xhtml.*
然后,您可以将所有重复模式组合在一起。所有文件结尾都以点开头,并且可能有可选的结尾,
结尾。*
始终包含
结尾

\.(html|htm|shtml|shtm|xhtml).*
然后,我经常看到
htm
,所以我尝试提取它。将
htm
前后所有可能的字符一起提取(
表示0或1个字符):

而且,我总是检查它是否还在工作


这样,你也可以得到其他两个的正则表达式,并最终将它们合并在一起。

*
中的通配符代表任何0个或更多的字符。你可能需要
(?i)\.[xs]?htm\w*$
(?i)\.css\w*$
(?i)\.py\w*$
(?i)\.py[3ixw]?$
。注意,您仍然没有逃逸所有的
s.@WiktorStribiżew所以我上面的表达式,
\.html |.html |.shtml |.shtml |.shtm |.xhtml\*?$
不起作用,因为除
.xhtml>之外的所有内容都逃逸了
?您的问题不太清楚。请参阅。@WiktorStribiż谢谢您提供了这一点。最后的问题实际上,我是在猜测上面提到的
SQL文件的过滤器。我尝试了这个表达式:
\.[a-zA-Z]+$
。这是一种正确的实现方法吗?还是有其他有效的方法?再次感谢。SQLite3文件可以有
.sq3
扩展名,然后,您需要向正则表达式中添加数字,
\.[a-zA-Z0-9]+$
*
,通配符表示任何0个或更多字符。您可能需要
(?i)\.[xs]\htm\w*$
(?i)\.css\w*$
(?i)\.py\w*$
/
(?i)\.py[3ixw]?$
。注意,您仍然没有逃逸所有的
s.@WiktorStribiżew所以我上面的表达式,
\.html |.html |.shtml |.shtml |.shtm |.xhtml\*?$
不起作用,因为除
.xhtml>之外的所有内容都逃逸了
?您的问题不太清楚。请参阅。@WiktorStribiż谢谢您提供了这一点。最后的问题实际上,我是在猜测上面提到的
SQL文件的过滤器。我尝试了这个表达式:
\.[a-zA-Z]+$
。这是一种正确的实现方法吗?还是有其他有效的方法?再次感谢。SQLite3文件可以有
.sq3
扩展名,然后,您需要向正则表达式添加数字,
\.[a-zA-Z0-9]+$
好的,我现在可以看到很多实现方法。例如,带有.html文件的过滤器可以像Wiktor说的那样完成:
(?i)\.[xs]?htm\w*$
。但是我想在
RegexOptions.IgnoreCase
中使用它。这是不区分大小写的最好方法吗?另外,我发现
.shtm
.shtml
不匹配。@starweb在其他语言中,您在末尾用/gmi设置这些标志(全局、多行、不区分大小写)我想,
(?i)
也应该在.net中工作。而且
[xs]
(字符类)本质上与
(x | s)
相同。Wiktor还将
*
(任何字符)替换为
\w
,后者只匹配单词字符(abc…),因此没有空格、换行符或数字。这些是进一步完善表达式的步骤。我想我