从字符串创建正则表达式匹配模式

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);

【讨论】:

以上是关于从字符串创建正则表达式匹配模式的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式的全局匹配模式

正则表达式 - 匹配规则

正则表达式——更多匹配模式

正则表达式匹配规则及示例

正则-简单的模式

正则表达式 - 匹配规则