匹配C#接口文件名的正则表达式

8
在Visual Studio 2010的“Productivity Power Tools”插件中(非常好用),您可以根据正则表达式配置文件选项卡的颜色编码。
我有一个正则表达式,可以区分接口文件(IMyInterface.cs)和普通.cs文件的选项卡颜色。
[I]{1}[A-Z]{1}.*\.cs$

不幸的是,这也会给任何以大写字母"I"开头的文件(例如Information.cs)上色。

如何修改这个正则表达式以仅包括第一个字母为"I"且第二个字母不是小写字母的文件?


1
我不是正则表达式高手,但看起来它应该可以 - 我很惊讶它没有。也就是说,除非@BoltClock的编辑是为了添加正则表达式中的[A-Z]{1}部分... - Zann Anderson
3
听起来插件正在进行不区分大小写的匹配,我认为你无法改变这一点。 Regex r = new Regex(pattern, RegexOptions.IgnoreCase) - Chris Diver
是的,这个表达式对我也测试通过。它可能可以更简单,但没有什么问题。 - Andrew Hare
不,我错了,我认为有一种方法可以在这个模式中实现,只是想不起来怎么做了,也不确定哪个优先级更高。请看答案。 - Chris Diver
@Zannjaminderson:不,我只是重新标记了一下 :) - BoltClock
5个回答

5

您的正则表达式应该可以直接使用。可能是它在执行时处于忽略大小写模式。请尝试在您的正则表达式中使用(?-i)禁用该模式:

(?-i)[I]{1}[A-Z]{1}.*\.cs$

你的想法非常好,但是OP的表达不正确。总体来说还可以,但应该重写:无必要符号组;超出、重复捕获等。 - abatishchev
2
@abatishchev:你说得对,这不是很干净的代码,但它能够工作。我只是懒得复制和粘贴。至于大家都建议使用的'^'部分,我不能假设输入字符串仅包含文件名而不是完整文件路径(我不使用Power Tools)。 - Maxim Gueivandov

2
请尝试一下。
"(?-i)^I[A-Z].*\.cs$"

首先将大小写不敏感设置关闭。
请参考正则表达式选项

.* 匹配空格和其他不必要的字符。 - abatishchev
@abatischev: 顺便说一下,如果你想完全合规,你应该考虑到在Visual Studio中文件名可以包含任何Windows允许的文件名字符,也就是任何不是:/?:&*“<> |#%,Unicode控制和代理字符,系统保留名称和不是“.” 或“..”。这允许使用空格、下划线等。在这种情况下,可能没有必要验证文件名的完全符合性——如果文件存在,它已经符合要求了,我们只需要检查它是否以某个东西开头并以某个东西结尾。 - Maxim Gueivandov

1

在Windows中,文件名不区分大小写,因此Power Tools显然将使用不区分大小写的匹配。


0

我基于默认的模式,并使用了^I[A-Z].*\.cs[ ]*(\[read only\])?$ - 我认为这里有一个优先级问题,如果你保留默认的.cs模式匹配器并将你的添加到末尾,你的可能会被隐藏,因为它首先匹配了通用的那个。

而且你不能重新排序或删除它们,所以要让排序正常工作有点棘手...

顺便说一下,我不认为大小写敏感的问题((?-i)有任何区别。


0
这样怎么样:
^I([A-Z][A-Za-z0-9]*){1}\.cs$

所以

IMyInterface.cs // matches, MyInterface
IB.cs // B
IBa.cs // Ba
IC1.cs // C1
I.cs // don't
Information.cs // don't

证明链接


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接