REGEX 删除空格或破折号,如果它们在数字之间

Posted

技术标签:

【中文标题】REGEX 删除空格或破折号,如果它们在数字之间【英文标题】:REGEX remove spaces or dashes, if they are in between numbers 【发布时间】:2016-10-04 21:44:18 【问题描述】:

我正在修改现有的正则表达式以匹配信用卡号。有时这样的数字表示如下,用空格或破折号分隔数字块,如下所示;

3756-4564-2323-3435
3756 6432 3233 435

应预处理这些类型的匹配以删除那些特殊字符。通常数字块是 3 到 4 位数字。

谢谢

【问题讨论】:

What have you tried??这非常简单。 那么,你会想要使用正则表达式替换吗?像 (\d4)[ -](\(\d4)[ -](\d4)[ -](\d3,4) 匹配和 \1\2\3\4 替换这样简单的东西应该可以解决问题。 对不起 Ed,我不擅长正则表达式。感谢您是否可以提供帮助 感谢 micsthepick。我已修改您的建议以符合 BASH,([0-9]4)[ -]([0-9]4)[ -]([0-9]4)[ -]( [0-9]3,4) 【参考方案1】:

在 bash 中,您可以删除任何不是数字的内容:

$ var="3756-4564-2323-3435"
$ echo "$var//[^0-9]"
3756456423233435

【讨论】:

【参考方案2】:

正如@Ed 所说,在寻求解决方案之前,您应该尝试自己解决问题。否则,(\d4)[ -](\(\d4)[ -](\d4)[ -](\d3,4) 不应该正确匹配数字,将每个部分存储在捕获组 1-4 中吗?

如果您需要处理还没有分隔符的数字,只需使用 ? 限定符将它们设为可选:(\d4)[ -]?(\(\d4)[ -]?(\d4)[ -]?(\d3,4)

【讨论】:

谢谢@mic。我的错。我已经使用 sed 替换 sed -E 's/([0-9]4)[ -]([0-9]4)[ -]([0-9]4)[ -]([0-9]3,4)/\1\2\3\4/g' * 但如何使用它来替换文件中的所有匹配项 @user3148655 “你试过了吗”全局标志 g, sed -i ‘s/([0-9]4)[ -]([0-9]4)[ -]([0-9]4)[ -]([0-9]3,4)/\1\2\3\4/g’ file.txt 应该可以正常工作。 是的。它给了我这个错误。 sed: -e expression #1, char 67: invalid reference \4 on s' 命令的右轴` @user3148655 sed -E 's/([0-9]4)[ -]([0-9]4)[ -]([0-9]4)[ -]([0-9]3,4)/\1\2\3\4/g' a.txt 适合我。 它有效。但它不会替换文件中的文本,只会显示。

以上是关于REGEX 删除空格或破折号,如果它们在数字之间的主要内容,如果未能解决你的问题,请参考以下文章

Python regex如何在字母和数字之间插入连字符;并删除两个字母之间的连字符

正则表达式匹配信用卡号,除非它们出现在 UUID 中

从字符串中删除美国邮政编码:R regex

RegEx Tokenizer:将文本拆分为单词、数字、标点和空格(不要删除任何内容)

在 python 中使用 Regex 将 $$ 或更多替换为单个空格

用换行符捕获空格并删除它们,可能使用RegEx