【发布时间】:2017-05-24 04:50:47
【问题描述】:
我在 C# 中使用正则表达式来过滤文本中的所有 URL 和电话号码时遇到问题,除非它们以 *** 开头。如果更容易,星星也可以是其他角色。 例如,排除过滤以 ! 开头的 URL。或在 [] 内。
我正在使用 regex.Replace(text, replacement) 方法。
var rgx = new Regex(pattern, RegexOptions.IgnoreCase);
rgx.Replace(str, replacement ?? "[ URL HIDDEN ]");
所以我设法通过以下方式处理电子邮件:
\b(?<!(\*\*\*))[A-Z0-9._%+\*-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b
我当前用于过滤 URL 的正则表达式:
\b((https?:\/\/(www\.)?)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}[-a-zA-Z0-9@:%_\+.~#?&\/=]*)
我目前用于过滤电话号码的正则表达式:
\+?[0-9]{0,4}[\.\-\/)( ]*[0-9]{3,4}[\.\-\/)( ]*[0-9]{3,4}[\.\-\/)( ]*[0-9]{3,4}(?![a-z]{1,4})
我尝试过使用前瞻和后瞻的多种变体,但找不到解决方案。
感谢所有帮助。此外,如果您有任何其他更好的建议或解决方案,我将不胜感激。
【问题讨论】:
-
你在
Regex.IsMatch里面使用它吗?请展示你如何使用这些模式。 -
我修改了我的答案。我目前正在使用替换方法。
-
好的,我会建议一些非常通用的东西。