C# 如何获取字符串中特定单词之间的数字?
我想使用正则表达式从xml中提取电话号码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 我只需要
....
<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
中的数字,但看起来不匹配。