需要一个正则表达式来删除除数字之外的所有内容

Posted

技术标签:

【中文标题】需要一个正则表达式来删除除数字之外的所有内容【英文标题】:Need a regex to remove everything except numbers 【发布时间】:2015-01-05 02:53:20 【问题描述】:

除了 [^0-9\n] 之外,我还需要一些东西,我想要一个正则表达式(但不知道如何制作),它可以捕获像这样的数字模式中的任何东西,“0000000000”或“000-000-” 0000" 或者基本上是任何在之前或之间存在空格和/或特殊字符的数字。

所以任何数字,即使像这些 (626*) 34a2- 4387) 都应该转换为 6263424387

如何实现这一点?我觉得它太难了?

【问题讨论】:

请考虑将Stack Overflow Regular Expressions FAQ 加入书签以供将来参考。具体参见字符类部分。 正则表达式字符类[^0-9\n]有什么问题?除了它包含一个换行符\n(我假设你想保留它)之外? 另外,您使用的是哪种语言?答案可能取决于此(不同的语言 = 不同风格的正则表达式)。 它是文本段落,那里有电话号码,但也有其他包含数字的文本。所以 7[^0-9\n] 不起作用 【参考方案1】:

您可以使用以下方法搜索所有非数字:

\D+

[^0-9]+

并用空字符串替换。

RegEx Demo

【讨论】:

实际上,我需要在文字墙中查找并删除除电话号码之外的所有其他内容,例如段落,而不是成行。它基本上应该是这样的 xxx+xxx+xxxx,其中 + 可以包含从字母到所有特殊字符的任何内容。所以可以是 123*454j4323 等,也可以是 xxxxxxxxxx 假设有一堵文字墙,一个段落。我们需要删除段落的所有内容,只保留电话号码。电话号码可以是这样的 (xxx)xxx-xxxx 或 xxxxxxxxxx 或 +xxx+xxx+xxx+ 其中“+”号所在的位置可以是字母或特殊字符。我们希望能够检测到任何号码,即使它是这样的,*444d654-3244),我们稍后可以使用 [^0-9\n] 清理所有电话号码行,但现在,我们想要检测上述格式【参考方案2】:

我自己总是忘记这个,然后上网寻找答案。在这里,供我将来参考,以及互联网的其余部分

const rawNumber = '(555) 123-4567';
const strippedNumber = rawNumber.replace(/\D+/g, '');

当然,我上面的示例是特定于 javascript 的,但它可以很容易地适应其他语言。原始帖子未指定语言。

【讨论】:

【参考方案3】:

这是一个更好的方法。它也包括十进制数字。

"$9.0".replace(/[^0-9.]+/g, '');

JavaScript :)

【讨论】:

以上是关于需要一个正则表达式来删除除数字之外的所有内容的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式 - 如何匹配除特定模式之外的所有内容

正则表达式:匹配除特定模式之外的所有内容

正则表达式匹配除 5 之外的所有数字字符

正则表达式去除除科学记数法之外的所有非数字字符

如何使用正则表达式替换除指定字符串之外的所有内容

正则表达式:匹配除一个单词之外的所有内容[重复]