从字符串创建正则表达式匹配模式
Posted
技术标签:
【中文标题】从字符串创建正则表达式匹配模式【英文标题】:Create regex match pattern from a string 【发布时间】:2018-07-15 13:37:07 【问题描述】:有没有办法使用 c# 或 vb 获取一个字符串(在本例中为电话号码)并从中构造一个正则表达式匹配字符串,以便它也忽略其中的空格或其他字符?
因此,假设输入字符串为 01789000111,所有这些都将找到匹配项:-
01789 000111 或 01789 000 111 或 01789 00 01 11 或 (01789) 000111
【问题讨论】:
为什么需要正则表达式?只需从输入字符串中删除所有空格和大括号并进行比较。 因为我将它与 Linq 一起使用 - 例如Qry = Qry.Where(Function(x) rgx.IsMatch(If(x.Tel1, "")) 或 rgx.IsMatch(If(x.Tel2, "")) 或 rgx.IsMatch(If(x.Mob1, "")) 或 rgx.IsMatch(If(x.Mob2, ""))) @user9310259 我认为您应该将此信息添加到问题中 替换空格/() 然后测试是否相等? 我首先会问自己,为什么它们在数据库中的格式如此不同。有没有办法让您以相同的方式存储它们? 【参考方案1】:用正则表达式替换删除非数字然后比较:
var match = Regex.Replace(src, @"\D+", "") == target;
或者,您可以将目标数字转换为模式并进行测试:
var ans = Regex.IsMatch(src, Regex.Replace(target, @"\d", @"\D?$0\D?"))
如果您将大量src
字符串与目标进行比较,您可能应该从目标创建一个已编译的Regex
:
var tpattern = new Regex(Regex.Replace(target, @"\d", @"\D?$0\D?"), RegexOptions.Compiled);
var ans = tpattern.IsMatch(src);
【讨论】:
以上是关于从字符串创建正则表达式匹配模式的主要内容,如果未能解决你的问题,请参考以下文章