用通配符类型的搜索查找和替换字符串的某个部分
我希望能够读取文件,并替换所有实例: M9S1800.2带S1800(我想摆脱M9和.2). 我遇到的问题是," S"之后的4位数字每次都可能不同,而十进制后的数字. . 例如, 可以是:M9S3200.1或M9S5400.1或M9S5400.2 有人可以告诉我如何使用C#? 我知道如何通过使用此代码查找和替换: StreamReader reader = new StreamReader(fDialog.FileName.ToString()); string content = reader.ReadToEnd(); reader.Close(); content = Regex.Replace(content, "M2", "M3"); 但是使用M9S3200.1,我想更换通配符类型.例如,这就像将m9s* .1替换为s*,所以M9S3200.1刚刚成为S3200. 解决方案 content = Regex.Replace(
14 2024-04-25
编程技术问答社区
SSH.Net库和通配符的使用
我需要使用SSH.NET登录到SFTP并删除文件夹中的所有文件,但似乎SSH.NET不支持通配符.是真的吗?有办法修复它吗?这是我的代码. using (SftpClient sftpClient = new SftpClient(server, port, username, password)) { foreach (var d in sftpClient.ConnectionInfo.Encryptions.Where(p => p.Key != "blowfish-cbc").ToList()) { sftpClient.ConnectionInfo.Encryptions.Remove(d.Key); } sftpClient.Connect(); sftpClient.DeleteFile("/outgoing/*.*"); sftpClient.Disconnect(); } 解决方案 我也没有使
18 2024-04-24
编程技术问答社区
如何使用C#从FTP服务器上获取一系列的文件
我陷入了与ftpwebrequest对象一起使用的通配符参数 FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + WildCard)); 现在这很好,但是我现在想获取特定的文件范围. 说文件命名结构是*YYYYMMDD.*,我需要在今天的日期之前获取所有文件. 我一直在寻找一个不良好结果的通配符模式,它可以在简单的文件列表中使用. ,看起来我可以在这里使用Regex. 有什么想法吗? 解决方案 ftp RETR(检索)命令不支持通配符. 您必须获得所有文件的LIST,循环循环它们,仅检索遵循所需模式的文件.
18 2024-04-23
编程技术问答社区
带空格的 Solr 通配符查询
我有一个通配符查询,看起来像: q=location:los a* 我希望它与"洛杉矶"和"洛斯阿尔托斯"匹配.查询类似: q=los* 工作正常,但是一旦我添加Whitespace,我就不会得到任何结果.我如何在通配符查询中使用Whitespace? 解决方案 最近我自己遇到了这个问题,看来您要做的就是逃避查询中的空间.您的原始查询将由Solr解释为这样的问题: location:los id:a* (假设" ID"是您的默认搜索字段) 但是,如果您将查询写为: location:los\ a* 然后,它最终将被解析为: location:los a* ,上面的结果应产生您想要的结果(假设您的数据已正确索引). . 提示:弄清楚所有这些都很简单.只需在提交查询时使用的URL末尾添加&debugQuery=on,以查看Solr的解析. 其他解决方案 使用复杂查询解析器解决问题的解决方案: q={!compl
16 2024-04-23
编程技术问答社区
Golang 执行命令 chmod 返回错误
在这里熟悉golang,我正在尝试执行shell命令,我需要为任何.pem文件chmod,所以我决定使用通配符 * func main() { cmd := exec.Command( "chmod", "400", "*.pem" ) cmd.Stdout = os.Stdout cmd.Stderr = os.Stdout if err := cmd.Run(); err != nil { fmt.Println( "Error:", err ) } 我在执行时保持此错误: chmod: cannot access '*.pem': No such file or directory Error: exit status 1 解决方案 与来自C和其他语言的"系统"库呼叫不同,OS/EXEC软件包故意不会调用系统外壳,并且不会扩展任何Glob模式,也不会处理其他通常由外壳进行的扩展,管道或重定向./
20 2024-04-22
编程技术问答社区
在 c# 中使用通配符搜索进行字符串比较
我有两个字符串用于比较 String Str1 = "A C"; String Str2 = "A B C"; Str2.Contains(Str1); //It will return False ,Contains append % at Start and End of string //Replace space with % Str1 = "%A%C%"; Str2 = "%A%B%C%"; Str2.Contains(Str1); //Want it to return True , 我们确实有Contains,StartsWith,EndsWith的比较方法,但是我的要求是,如果我们比较 str2 和 str3 ,它应该返回 true ,因为它在 str2 中. 我们可以在c#中实现这种行为吗? 解决方案 我建议将 sql样转换为正则表达式: private static string LikeToRegular(string value)
16 2024-04-22
编程技术问答社区
在 shell 脚本中使用通配符检查文件是否存在
我试图检查文件是否存在,但使用通配符.这是我的示例: if [ -f "xorg-x11-fonts*" ]; then printf "BLAH" fi 我也尝试过没有双引号. 解决方案 对于bash脚本,最直接,最直接的方法是: if compgen -G "${PROJECT_DIR}/*.png" > /dev/null; then echo "pattern exists!" fi 即使在具有数百万个文件的目录中,这也将非常迅速地工作,并且不涉及新的子壳. source 最简单的是依靠ls返回值(在不存在文件时它返回非零): if ls /path/to/your/files* 1> /dev/null 2>&1; then echo "files do exist" else echo "files do not exist" fi i重定向ls输出使其完全保持沉默. 这是一个优化,也依赖
22 2024-04-22
编程技术问答社区
在NTFS中搜索文件
我们有一个相当大的磁盘阵列,上面有大约2-300万个XML文件.磁盘使用NTF格式化,我们想使用通配符搜索文件系统.因此,类似 * SomePartofThefileName *的东西将是典型的搜索查询. 我们正在使用.NET,并且发现使用DirectoryInfo似乎很慢. DirectoryInfo directoryInfo = new DirectoryInfo(directory); List fileInfos = directoryInfo.GetFiles(searchString, SearchOption.AllDirectories).ToList(); 使用环和递归也很慢. 我们可以使用较低级别的API调用来直接搜索NTFS索引? 使用命令行中使用dir * somepartofthefilename */s几乎是即时的.那里有可以利用的东西吗? 解决方案 我不确定您是否可以使用索引服务,但是对于您尝试做的
14 2024-04-21
编程技术问答社区
查找和替换RegEx问题
,由于这里的其他问题,我开始对Regex掌握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(value)y(value)g54 我的正则陈述如下,但行不通. content = Regex.Replace(content, @"(X(?:\d*\.)?\d+)*(Y(?:\d*\.)?\d+)", "$1$2G54"); 有人可以为我修改它,以便它有效并会
8 2024-04-21
编程技术问答社区
Azure Search .NET SDK自定义分析仪
没有太多背景,这是我的问题: 使用C#中的.NET SDK创建新的Azure搜索索引(使用文档中提供的酒店示例)我的代码看起来像这样: public class Hotel { [System.ComponentModel.DataAnnotations.Key] [IsFilterable] public string HotelId { get; set; } [IsFilterable, IsSortable, IsFacetable] public double? BaseRate { get; set; } [IsSearchable] public string Description { get; set; } [IsSearchable] [Analyzer(AnalyzerName.AsString.FrLucene)] [JsonProperty("description
8 2024-04-21
编程技术问答社区
OpenFileDialog只显示没有扩展名的文件名
我在我的C#程序中具有以下代码: OpenFileDialog fDialog = new OpenFileDialog(); fDialog.Title = "Open a file"; fDialog.Filter = "NCF files (*.ncf)|*.ncf|All files (*.*)|*.*|No Extensions (*.)|*."; 我希望能够从以下内容中选择: *.ncf (仅具有.ncf扩展名的文件) **.*(所有文件) 和具有无扩展的文件例如: filewithnoextension 我知道***. 我只想能够显示没有扩展名的文件名. 用 *过滤.不做这个问题.使用DOS窗口( dir *.)进行操作时,它可以正常工作,但是C#似乎忽略了 *.过滤器. 有什么方法可以使用C#? 做到这一点 谢谢. 解决方案 如果其他软件
22 2024-04-20
编程技术问答社区
如何用通配符扫描一个有特定子目录的目录
我想知道扫描具有您不确定字符的目录的好方法是什么. 例如,我想扫描 c:\ program \ version2.*\ files 含义 该文件夹位于C:\Program 中 Version2.*可能是Version2.33,Version2.1等. 该文件夹中有一个名为Files的文件夹 我知道我可以做foreach (directory) if contains("Version2.")之类的事情,但是我想知道是否有更好的方法. 解决方案 Directory.enumereatectories 接受搜索模式.因此,列举拥有通配符的父母,而不是列举其余的父母: var directories = Directory.EnumerateDirectories(@"C:\Program\", "Version2.*") .SelectMany(parent => Directory.EnumerateDirectori
12 2024-04-19
编程技术问答社区
过滤文件名:得到*.abc而没有*.abcd,或*.abcde,等等。
directory.getFiles(localfilepath,searchpattern); msdn注意: 在搜索pattern中使用星号通配符时,例如" .txt"时,当扩展名为恰好三个字符长的时,匹配行为与扩展长度或小于三个字符长时不同.具有三个字符的文件扩展名的搜索模式返回具有三个或多个字符的扩展名的文件,其中前三个字符匹配搜索pattern中指定的文件扩展名.一个具有一个,两个或三个以上字符的文件扩展名的搜索模式仅返回只有该长度的延长的文件,该文件与搜索pattern中指定的文件扩展名相匹配.使用问号通配符字符时,此方法仅返回匹配指定文件扩展名的文件.例如,给定两个文件," file1.txt"和" file1.txtother",在目录中,"文件?.txt"的搜索模式仅返回第一个文件,而搜索模式" file .txt"返回两个文件. 以下列表显示了SearchPattern参数不同长度的行为: *.abc返回具有.abc,.abcd,.abcde,
10 2024-04-19
编程技术问答社区
.NET应用程序是否有通配符扩展选项?
我已经使用了是否有标准方法可以自动扩展应用程序的命令行参数? (即,从args参数中的一个条目扩展到所有匹配的通配符). ). p.s.:我目前的小项目已经与Directory.GetFiles()一起入侵了一些东西,但它没有用路径覆盖通配符(尚未),如果没有自定义代码,可以做到这一点. 这是我粗略的黑客插图.它需要将GetFiles()路径和名称的参数分开,但这是一个一般的想法.将setargv.obj链接到C或C ++应用程序基本上将完成所有通配符的扩展,使用户仅在 argv array上迭代. public static void Main(string[] args) { foreach (string argString in args) { // Split into path and wildcard int lastBackslashPos = argString.LastIndexOf('\\') +
12 2024-04-14
编程技术问答社区
检查带有通配符的文件名搜索模式的碰撞情况
我需要比较文件系统通配符表达式,以查看其结果是否会重叠,仅通过检查/比较表达式. 为例如,我们正在构建一个实用程序,该实用程序将根据文件系统通配符表达式将文件(或更多位置)从一个(或更多位置)分类为单独的文件夹.例如: *.txt进入文件夹A, *.doc进入文件夹B,依此类推.我们支持的通配符是 *和? 我希望能够从仅分析通配符表达式来确定它们是否会发生冲突/重叠. 例如,如果我有以下表达式: *.x.y *.y 它们会冲突(重叠),因为第二个表达式 *.y将包括 *.x.y结果. (例如A.x.y将匹配两个表达式) 我正在通过使用所有使用所有表达式建造树结构来接近这一点,从而确定如果表达式发生冲突,建造树的行为将失败. For example: *.x a.b a.c b.d might create a tree like +-*-.-x | start +--+ | +-b
14 2024-04-13
编程技术问答社区
C#泛型--设计中没有下限?
我正在阅读在工作中的编码人员中对约书亚·布洛克(Joshua Bloch)的采访,他对Java 5中的仿制药的引入感叹.他不喜欢特定的实施,这主要是因为差异支持(Java的通配符)使它不必要地复杂. 据我所知,C#3没有明确的,有限的通配符,例如您无法宣布使用资产收集或任何资产子类(void PriceBatch(Collection assets) in Java中的void PriceBatch(Collection assets)?)的方法批量. 有人知道为什么尚未将通配符和界限添加到C#中吗?这些功能是否有意使语言变得更简单,还是他们还没有实施这些功能? 编辑:圣烟,埃里克·利珀特(Eric Lippert)的评论!在阅读了他和保罗的有见地的评论之后,我意识到至少支持上限,并且可以将上述示例转换为C#,为: void PriceBatch(ICollection assets) w
12 2024-04-13
编程技术问答社区
正则表达式通配符
我刚刚开始使用Regular Expressions,这是如此的压倒性,即使阅读文档后,我似乎也找不到从哪里开始帮助解决我的问题. 我必须一堆字符串. "Project1 - Notepad" "Project2 - Notepad" "Project3 - Notepad" "Untitled - Notepad" "HeyHo - Notepad" 我有一个包含通配符的字符串. "* - Notepad" 我需要,如果将这些字符串与包含通配符的任何一个字符串进行比较,则它将返回真实. (使用Regex.IsMatch()或类似的东西..) 我通常不要求这样的答案,但我只是找不到我需要的东西.有人可以向我指出正确的方向吗? 解决方案 通配符*等效于Regex模式".*"(贪婪)或".*?"(not-Greedy),因此您需要执行string.Replace(): string pattern = Regex.Escape(inpu
12 2024-04-12
编程技术问答社区
只匹配一定长度或更短的通配符的Regex
有没有办法将正则声明搜索最大长度的通配符?例如: somestuff.*morestuff 如果我希望以上匹配 somestuffblahmorestuff 但不是 somestuffblahblahmorestuff 这是可能的吗? 解决方案 匹配已知的长度使用.{2,5},其中2是字符的最小数量,5是最大值.这两个值都是可选的,但您确实需要一个或另一个值 可以在此主题上阅读更多内容在这里 其他解决方案 在正则: {n} 完全匹配上一个元素n次. {n,} 匹配上一个元素至少n次. {n,m} 匹配上一个元素至少n次,但不超过m>> 例如: ,\d{3} 匹配,876,,543和,210 in 9,876,543,210 \d{2,} 匹配166,29,1930 \d{3,5} 匹配19302 193024 其他解决方案 somestuff.{4,7}morestuff {m
36 2024-04-12
编程技术问答社区
Java通配符在C#泛型中的作用是什么?
我正在开发一个应用程序,我需要调用一种通用类的方法,而我不在乎实际类型的实例.类似以下Java代码: public class Item{ private T item; public doSomething(){...} } ... public void processItems(Item[] items){ for(Item item : items) item.doSomething(); } 当时我很着急,所以我通过定义了使用我需要调用的方法并将通用类实现的方法来解决问题. public interface IItem { void doSomething(); } public class Item : IItem { private T item; public void doSomething(){...} } ... public void processItems(IItem[] it
10 2024-04-11
编程技术问答社区