Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获取字符串中特定单词之间的数字?_C#_.net_Regex - Fatal编程技术网

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

C# 如何获取字符串中特定单词之间的数字?,c#,.net,regex,C#,.net,Regex,我想使用正则表达式从xml中提取电话号码 .... <address>phone number</address> .... ex)<address>1234567890</address> 。。。。 电话号码 .... ex)1234567890 但有时,该电话号码的前缀会添加一些不必要的字符 ex) <address>tel+1234567890</address> ex)电话+1234567890 我只需要

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

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

ex)<address>1234567890</address>
。。。。
电话号码
....
ex)1234567890
但有时,该电话号码的前缀会添加一些不必要的字符

ex) <address>tel+1234567890</address>
ex)电话+1234567890
我只需要电话号码

我使用了
+?(\d+)

但这并不能正常工作

当有前缀词时,我怎样才能始终获得数字?

您可以使用linq:

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

基本上,您的正则表达式不起作用,因为您没有将
设置为可选。
您可以按如下方式修复它:
*?
或执行以下操作:

正则表达式:

 @"<address>[^>\d]*(\d+)[^>]*</address>"
@“[^>\d]*(\d+[^>]*”
格式:

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

 **  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
**Grp 0-(位置51,透镜29)
1234567890
**玻璃钢1-(位置60,透镜10)
1234567890
---------------
**玻璃钢0-(位置169,透镜33)
电话+1234567890
**玻璃钢1-(位置182,透镜10)
1234567890

您在代码方面做了哪些尝试。。你有没有在谷歌上搜索过RegEx和大量的在线例子来寻找你想要的东西?为什么是RegEx?NET中有非常好的XML解析器。@nvoigt:公平地说,我认为您可能仍然需要一个正则表达式来事先删除无关字符。@jay:您说的“但这不能正常工作”是什么意思?这不重要吗?它是否有时与正确的事物相匹配,而不是与其他事物相匹配?它不能编译吗?它还有别的作用吗?请准确描述错误以帮助他人帮助您。您是否尝试过
[^>\d]*(\d+[^>]*
?正则表达式只需要捕获数字@“(\d)+”将返回所需的匹配项。@dougvdotcom-只是任何
\d
?从哪里开始?@sln:数字总是以文本作为前缀,不会中断。因此,他只需要按一个或多个数字进行分组。在进行测试并按预期执行。@dougvdotcom-
\d+
也将匹配此
电话+1234567890
中的数字,但看起来不匹配。