首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在c#中返回基于通配符的字符串

在c#中返回基于通配符的字符串
EN

Stack Overflow用户
提问于 2018-06-06 03:26:54
回答 2查看 342关注 0票数 1

我试图在c#中找到一个方法来返回通配符匹配的字符串,但是我只能找到关于如何返回的信息,如果它包含通配符匹配,而不是通配符匹配表示的字符串。

例如,

var myString = "abcde werrty qweert";
var newStr = MyMatchFunction("a*e", myString);
//myString = "abcde"

如何创建MyMatchFunction?我在stackoverflow上进行了搜索,但是如果字符串包含通配符字符串,而不是它所表示的字符串,则所有与c#和通配符有关的操作都只是返回布尔值。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-06 03:30:50

您是否考虑过使用Regex?

例如,使用模式a.*?e,您可以实现此效果

string sample  = "abcde werrty qweert";
string pattern = "a.*?e";
Regex rgx      = new Regex(pattern, RegexOptions.IgnoreCase);
MatchCollection matches = rgx.Matches(sample);

foreach (Match match in matches)
    Console.WriteLine(match.Value);

它会打印出来

abcde
票数 3
EN

Stack Overflow用户

发布于 2018-06-06 04:14:04

对于模式为"a*b""abcde werrty qweert",默认的通配符搜索将返回"abcde werrty qwee",但您可以使用gready搜索"abcde"的结果。

使用Regex进行WildCard匹配的函数

public static string WildCardMatch(string wildcardPattern, string input, bool Greedy = false)
{
    string regexPattern = wildcardPattern.Replace("?", ".").Replace("*", Greedy ? ".*?" : ".*");
    System.Text.RegularExpressions.Match m = System.Text.RegularExpressions.Regex.Match(input, regexPattern, 
        System.Text.RegularExpressions.RegexOptions.IgnoreCase);
    return m.Success ? m.Value : String.Empty;
}

结果:

var myString = "abcde werrty qweert";

var newStr = WildCardMatch("a*e", myString);
//newStr = "abcde werrty qwee"

newStr = WildCardMatch("a*e", myString, Greedy: true);
//newStr = "abcde"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50707583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档