正则表达式只提取数字,但只有字符串不包含任何字母

问题描述:

我想从可能包含一些特殊字符(比如说“+ - ()”)但不包含任何其他字符的字符串中提取数字:正则表达式只提取数字,但只有字符串不包含任何字母

"+123 (456) 7-8" -> "1, 2, 3, 4, 5, 6, 7, 8" is extracted 
"123a45" -> pattern matching fails, nothing is extracted 
"1234 B" -> pattern matching fails, nothing is extracted 
+0

好吧,所以写一个正则表达式来做到这一点。 – jonrsharpe

+0

...我拿出了一个原因,请参阅http://meta.stackexchange.com/q/2950/248731 – jonrsharpe

+0

我试着玩有点类似的问题的解决方案:[正则表达式匹配行不包含一个单词?](http://*.com/questions/406230/regular-expression-to-match-line-that-doesnt-contain-a-word)但没有多少运气。如果任何字母出现,我可以得到模式匹配失败,但如果sting也包含“ - ()+”字符,我不能提取数字... –

你想要的是能够与GNU的sed这样的:

sed -r -n '/^[-+0-9() ]+$/ {s/[^0-9]//g; s/([0-9])/\1, /g; p;}' file 
  • 重新^[-+0-9() ]+$你的线条相匹配,应该在其他重工具
  • 工作210
  • { ... }内的部分产生的格式化输出,你需要采取对您的工具

免费代码在这里:

.*[^\d^+^(^)^\-^\s]+.*(?:\d)|(?:\d)(?=.*[^\d^+^(^)^\-^\s]+.*)|(\d)

说明:除“其他
[^\d^+^(^)^\-^\s]匹配字符+ - ()“和号码

Regex Demo