如何在字符串中的特定单词之间获取数字?

时间:2015-03-05 17:53:12

标签: c# .net regex

我想使用正则表达式从xml中提取电话号码。

....
 <address>phone number</address>
....

ex)<address>1234567890</address>

但有时候这个电话号码的前缀是一些不必要的字符。

ex) <address>tel+1234567890</address>

我只需要电话号码。

我使用了<address>.+?(\d+)</address>

但这不能正常运作。

如果有前缀词,我怎么能总是得到号码?

2 个答案:

答案 0 :(得分:2)

您可以使用linq:

string number = "tel+12345678";
string filtered = new String(number.Where(x => Char.IsDigit(x)).ToArray());

答案 1 :(得分:0)

基本上,你的正则表达式不起作用,因为你没有.+?可选。
您可以像.*?一样修复它,或者执行以下操作:

正则表达式:

 @"<address>[^>\d]*(\d+)[^>]*</address>"

格式化:

 <address> [^>\d]* 
 ( \d+ )                       # (1)
 [^>]* </address>

输出:

 **  Grp 0 -  ( pos 51 , len 29 ) 
<address>1234567890</address>
 **  Grp 1 -  ( pos 60 , len 10 ) 
1234567890

---------------

 **  Grp 0 -  ( pos 169 , len 33 ) 
<address>tel+1234567890</address>
 **  Grp 1 -  ( pos 182 , len 10 ) 
1234567890