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…),因此没有空格、换行符或数字。这些是进一步完善表达式的步骤。我想我