在字符串中查找通配符子字符串的正则表达式
问题描述:
我是新来的正则表达式,想知道模式来查找通配符字符串是否存在于另一个字符串中? 例如:
如果* 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
}
答
您可以用*
分裂,然后逃逸每个块,然后用.*?
加入。
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
选项。
您拥有的代码是C#,只使用相关标签。 –