在字符串中查找通配符子字符串的正则表达式

问题描述:

我是新来的正则表达式,想知道模式来查找通配符字符串是否存在于另一个字符串中? 例如:
如果* search_string的在main_string(如果主弦与search_string的结尾)
如果SEARCH_STRING *在main_string(如果主弦与search_string的开头)
如果* search_string的*在main_string(如果主字符串包含search_string的)
如果main_string SEARCH_STRING(如果主串本身SEARCH_STRING)在字符串中查找通配符子字符串的正则表达式

search_string的可以是任何字符串,即使是这样的“(13786213”或“34576(13786213”,应在字符串中的任何情况下工作吗?

我试过这个,但不是通用的,它失败了S为“(13786213”案等

string search_string = search_string.Replace("*", ".*?"); 
if(new Regex(search_string.ToLower()).IsMatch(main_string)) 
{ 
    \\success 
} 
+0

您拥有的代码是C#,只使用相关标签。 –

您可以用*分裂,然后逃逸每个块,然后用.*?加入。

var search_string = string.Join(".*", search_string.Split('*').Select(v => Regex.Escape(v))); 

然后,使不区分大小写,与RegexOptions.IgnoreCase标志编译Regex对象。

这里是一个C# demo

var search_string = "(137*86213"; 
search_string = string.Join(".*", search_string.Split('*').Select(v => Regex.Escape(v))); 
if(Regex.IsMatch("(137 text here 86213", search_string, RegexOptions.IgnoreCase)) 
{ 
    Console.Write("success"); 
} 
// => success 

如果输入字符串可以包含换行符,还添加RegexOptions.Singleline选项。

+0

谢谢Wiktor的解决方案,让我测试各种情况下,并进一步适应:) – jithu

+0

问题可能是一个愚蠢的,但有没有什么办法可以跳过,如果我实际上有一个*内的search_string和通配符(*) :) :) – jithu

+0

@jithu你的意思是你的通配符被定义为'(*)'?然后你需要用'.Split(new [] {“(*)”},StringSplitOptions.None)'分割。见[这个答案](https://*.com/questions/38974292/manual-string-split-in-c-sharp/38974310#38974310)。 –