Tag: 通配符

查找并替换RegEx问题

由于我在其他问题上对SO的所有帮助很大,我开始掌握RegEx。 但我仍然对这个感到厌烦: 我的代码是: StreamReader reader = new StreamReader(fDialog.FileName.ToString()); string content = reader.ReadToEnd(); reader.Close(); 我正在阅读文本文件,我想搜索此文本并进行更改(X和Y值始终在我的文本文件中互相跟随): X17.8Y-1。 但是这个文本也可以是X16.1Y2.3 (在X和Y之后值总是不同的) 我想把它改成这个 X17.8Y-1.G54 要么 X(值)Y(值)G54 我的RegEx声明如下,但它无效。 content = Regex.Replace(content, @”(X(?:\d*\.)?\d+)*(Y(?:\d*\.)?\d+)”, “$1$2G54”); 有人可以为我修改它,以便它可以工作,并将搜索X(通配符)Y(通配符)并将其替换为X(值)Y(值)G54?

如何使用具有特定子目录的通配符扫描目录

我想知道什么是扫描具有您不确定的字符的目录的好方法。 例如,我想扫描 C:\程序\版本2 * \文件 含义 该文件夹位于C:\Program Version2.*可以是Version2.33 , Version2.1等。 该文件夹中有一个名为Files的文件夹 我知道foreach (directory) if contains(“Version2.”) ,我可以做像foreach (directory) if contains(“Version2.”)这样的事情,但我想知道是否有更好的方法。

过滤文件名:获取* .abc而不使用* .abcd或* .abcde,依此类推

Directory.GetFiles(LocalFilePath,searchPattern); MSDN备注: 在searchPattern中使用星号通配符(例如“ .txt”)时,扩展名长度正好为三个字符时的匹配行为与扩展名长度多于或少于三个字符时的匹配行为不同。 具有正好三个字符的文件扩展名的searchPattern将返回扩展名为三个或更多字符的文件,其中前三个字符与searchPattern中指定的文件扩展名匹配。 文件扩展名为一个,两个或三个以上字符的searchPattern仅返回扩展名与searchPattern中指定的文件扩展名完全匹配的文件。 使用问号通配符时,此方法仅返回与指定文件扩展名匹配的文件。 例如,给定两个文件“file1.txt”和“file1.txtother”,在目录中,“file?.txt”的搜索模式只返回第一个文件,而“file .txt” 的搜索模式返回两个文件。 以下列表显示了searchPattern参数的不同长度的行为: *.abc返回扩展名为.abc , .abcd , .abcde , .abcdef等的文件。 *.abcd仅返回扩展名为.abcd文件。 *.abcde仅返回扩展名为.abcde文件。 *.abcdef仅返回扩展名为.abcdef文件。 将searchPattern参数设置为*.abc ,如何返回扩展名为.abc ,而不是.abcd , .abcde等的文件? 也许这个function可行: private bool StriktMatch(string fileExtension, string searchPattern) { bool isStriktMatch = false; string extension = searchPattern.Substring(searchPattern.LastIndexOf(‘.’)); if (String.IsNullOrEmpty(extension)) { isStriktMatch = true; } else if (extension.IndexOfAny(new char[] { ‘*’, […]

C#LINQ:如何处理通配符搜索?

我需要一个像这样的搜索函数:该函数接受具有多种类型通配符的所有字符串: * or % >>> can replace one or more characters # >>> used to replace a number @ >>> used to replace an alphabet ? >>> used to replace a character (can be both number and alphabet) 据我所知,在LINQ中有3个搜索字符串的函数:StartsWith,EndsWith和Contains。 在SQL查询中,有两种类型的LIKE:%表示一个或多个字符,_表示只有一个字符。 那么,我该如何解决这个问题呢? 非常感谢你

C#语法和切换通配符

我想补充一点,每当它识别出“搜索X”时它就会搜索“X”,但我不知道如何将其添加到语法中,或者如何用我的开关来做这样的事情声明。 private void Form1_Load(object sender, EventArgs e) { Choices commands = new Choices(); commands.Add(new string[] { “hello”, “start chrome”, “search” }); GrammarBuilder gBuilder = new GrammarBuilder(); gBuilder.Append(commands); gBuilder.Culture = new System.Globalization.CultureInfo(“en-GB”); Grammar grammar = new Grammar(gBuilder); recEngine.LoadGrammarAsync(grammar); recEngine.SetInputToDefaultAudioDevice(); recEngine.SpeechRecognized += RecEngine_SpeechRecognized; } private void RecEngine_SpeechRecognized(object sender, SpeechRecognizedEventArgs e) { switch (e.Result.Text) { case “hello”: synthesizer.SpeakAsync(“Hello! […]

C#generics – 没有设计的下限?

我正在阅读Codehua at Work中对Joshua Bloch的采访,他在Java 5中对generics的介绍感到遗憾。他不喜欢具体的实现,主要是因为方差支持–Java的通配符 – 使得它不必要地复杂化。 据我所知,C#3没有明确的,有界的通配符,例如你不能声明一个方法PriceBatch,它接受一个Asset或任何Asset子类的void PriceBatch(Collection assets) ( void PriceBatch(Collection assets)在Java?)。 有谁知道为什么没有将通配符和边界添加到C#中? 故意遗漏这些function以使语言更简单,或者这是他们还没有实现的东西呢? 编辑:圣烟,Eric Lippert本人的评论! 在阅读了他和Paul的深刻见解之后,我意识到至少支持上限,并且上面的例子可以转换为C#: void PriceBatch(ICollection assets) where T : Asset 另一方面,显然不支持下限,因为Eric在他的第二条评论中说,例如,可能没有办法直接将这个(有点人为的)Java代码转换为C#: public class Asset {} public class Derivative extends Asset {} public class VanillaOption extends Derivative {} public static void copyAssets(Collection src, Collection dst) { for(T asset : src) […]

.net应用程序是否有通配符扩展选项?

我过去使用setargv.obj链接扩展通配符参数用于许多C和C ++应用程序,但我找不到.net应用程序的任何类似提及。 有没有一种标准方法可以让您的应用程序的命令行参数自动扩展通配符? (即将* .doc从args参数中的一个条目展开到与该通配符匹配的所有条目)。 PS我已经使用Directory.GetFiles()为我当前的小项目攻击了一些东西,但是它没有覆盖带路径的通配符(还有),如果没有自定义代码就可以做到这一点。 更新:这是我粗略的黑客,为了说明。 它需要拆分GetFiles的路径和名称参数,但这是一般的想法。 将setargv.obj链接到C或C ++应用程序基本上会进行所有通配符扩展,使用户只能遍历argv数组。 static void Main(string[] args) { foreach (String argString in args) { // Split into path and wildcard int lastBackslashPos = argString.LastIndexOf(‘\\’) + 1; path = argString.Substring(0, lastBackslashPos); filenameOnly = argString.Substring(lastBackslashPos, argString.Length – lastBackslashPos); String[] fileList = System.IO.Directory.GetFiles(path, filenameOnly); foreach (String fileName in fileList) { //do […]

OpenFileDialog – 仅显示没有扩展名的文件名

我的C#程序中有以下代码: OpenFileDialog fDialog = new OpenFileDialog(); fDialog.Title = “Open a file”; fDialog.Filter = “NCF files (*.ncf)|*.ncf|All files (*.*)|*.*|No Extensions (*.)|*.”; 我希望能够让用户从以下选择中进行选择: * .NCF (仅限.NCF扩展名的文件) **。* (所有文件) 和没有扩展名的文件,例如: filewithnoextension 我知道***。*会这样做,但它也会在同一目录中显示.NCF,.TXT和所有其他文件。 我只是希望能够显示没有扩展名的文件名。 用*过滤。 没有办法。 使用DOS窗口( dir *。 )执行它时工作正常,但C#似乎忽略了*。 过滤。 有没有办法用C#做到这一点? 谢谢。

正则表达式通配符

我刚刚开始使用Regular Expressions ,这是如此压倒性的,即使在阅读文档后,我似乎无法找到从哪里开始帮助解决我的问题。 我需要一堆字符串。 “Project1 – Notepad” “Project2 – Notepad” “Project3 – Notepad” “Untitled – Notepad” “HeyHo – Notepad” 我有一个包含外卡的字符串。 “* – Notepad” 如果我将这些字符串中的任何一个与包含通配符的字符串进行比较,我将需要它返回true。 (使用Regex.IsMatch()或类似的东西..) 我通常不会要求这样的答案,但我找不到我需要的东西。 有人能指出我正确的方向吗?

使用通配符检查文件名搜索模式中的冲突

我需要通过仅检查/比较表达式来比较文件系统通配符表达式以查看它们的结果是否重叠。 例如,我们正在构建一个实用程序,它可以根据文件系统通配符表达式将文件从一个(或多个位置)排序到单独的文件夹中。 例如:* .txt进入文件夹a,* .doc进入文件夹b,依此类推。 我们支持的通配符是*和? 我希望能够通过分析通配符表达式确定它们是否会发生冲突/重叠。 例如,如果我有以下表达式: *某个.XY * .Y 它们会冲突(重叠),因为第二个表达式* .y将包含* .xy结果。 (例如Axy会匹配两个表达式) 我正在通过使用所有表达式构建树结构来接近这一点,认为如果表达式冲突,构建树的行为将失败。 例如: *。X AB AC BD 可能会创建一个树 + – * -.- X | 开始+ – + | + -b | | + -a -.- + – Ç | | + -b -.- d 如果我尝试添加模式bx,则树将在* .x路径后成功,从而表示该模式已存在。 我正朝着正确的方向前进吗? 或者是否有一种已知的攻击方法?