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

时间:2016-03-05 21:15:12

标签: regex regex-negation

我想从字符串中提取可能包含一些特殊字符的数字(让我们说" + - ()")但不是任何其他字符,即:

"+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

2 个答案:

答案 0 :(得分:1)

你想要的是这样的gnu sed:

sed -r -n '/^[-+0-9() ]+$/ {s/[^0-9]//g; s/([0-9])/\1, /g; p;}' file
  • re ^[-+0-9() ]+$与您的行匹配,这应该适用于其他re工具
  • { ... }内的部分会创建您的格式化输出,您需要将其用于您的工具

答案 1 :(得分:0)

免费代码:

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

说明:
[^\d^+^(^)^\-^\s]匹配除“+ - ()”和数字

之外的其他字符

Regex Demo