Bri*_*ght 66 c# regex vb.net vbscript code-generation
我需要一个可以在VBScript和.NET中使用的正则表达式,它只返回字符串中的数字.
例如,以下任何"字符串"应仅返回1231231234
这将在电子邮件解析器中用于查找客户可能在电子邮件中提供的电话号码并进行数据库搜索.
我可能错过了类似的正则表达式,但我确实在regexlib.com上搜索.
[编辑] - 在设置musicfreak的答案后添加了由RegexBuddy生成的代码
VBScript代码
Dim myRegExp, ResultString
Set myRegExp = New RegExp
myRegExp.Global = True
myRegExp.Pattern = "[^\d]"
ResultString = myRegExp.Replace(SubjectString, "")
Run Code Online (Sandbox Code Playgroud)
VB.NET
Dim ResultString As String
Try
Dim RegexObj As New Regex("[^\d]")
ResultString = RegexObj.Replace(SubjectString, "")
Catch ex As ArgumentException
'Syntax error in the regular expression
End Try
Run Code Online (Sandbox Code Playgroud)
C#
string resultString = null;
try {
Regex regexObj = new Regex(@"[^\d]");
resultString = regexObj.Replace(subjectString, "");
} catch (ArgumentException ex) {
// Syntax error in the regular expression
}
Run Code Online (Sandbox Code Playgroud)
Mat*_*ton 184
在.NET中,您只能从字符串中提取数字.像这样:
string justNumbers = new String(text.Where(Char.IsDigit).ToArray());
Run Code Online (Sandbox Code Playgroud)
Sas*_*gov 12
我不知道VBScript是否有某种"正则表达式替换"函数,但如果它有,那么你可以做类似这样的伪代码:
reg_replace(/\D+/g, '', your_string)
Run Code Online (Sandbox Code Playgroud)
我不知道VBScript所以我不能给你确切的代码,但这将删除任何不是数字的东西.
编辑:确保有全局标志(正则表达式末尾的"g"),否则它只匹配字符串中的第一个非数字.
Teo*_*ite 12
作为主要.Net解决方案的替代方案,改编自类似问题的答案:
string justNumbers = string.Concat(text.Where(char.IsDigit));
Run Code Online (Sandbox Code Playgroud)
注意:你这里只解决了一半的问题.
对于"在野外"输入的美国电话号码,您可能拥有:
您需要在代码中添加一些智能,以使得到的数字列表符合您在数据库中实际搜索的单个标准.
你可以做一些简单的事情来解决这个问题:
在RegEx删除非数字之前,查看字符串中是否有"x".如果有的话,在它之后切掉一切(将处理大多数版本的分机编号).
对于任何以"1"开头的10位以上的数字,请切断1.它不是区号的一部分,美国区号从2xx范围开始.
对于任何仍然超过10位的数字,假设余数是某种类型的扩展,并将其删除.
使用"结束"模式搜索进行数据库搜索(SELECT*FROM mytable WHERE phonenumber LIKE'blah%').这将处理sitations(虽然与错误的可能性),不设置区号,但你的数据库具有数量与区号.