Regex 如果空格或破折号位于数字之间,则正则表达式会删除它们

Regex 如果空格或破折号位于数字之间,则正则表达式会删除它们,regex,bash,credit-card,Regex,Bash,Credit Card,我正在修改现有的正则表达式以匹配信用卡号码。有时,这些数字表示如下,用空格或破折号分隔数字块,如下所示: 3756-4564-2323-3435 3756 6432 3233 435 应预处理这些类型的匹配以删除这些特殊字符。通常数字块是3到4位数字 谢谢正如@Ed提到的,在寻求解决方案之前,你应该试着自己解决问题。否则,(\d{4})[-](\(\d{4})[-](\d{4})[-](\d{3,4})是否应该正确匹配数字,将每个部分存储在捕获组1-4中 如果您需要处理没有分隔符的数字,只需使

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

3756-4564-2323-3435
3756 6432 3233 435
应预处理这些类型的匹配以删除这些特殊字符。通常数字块是3到4位数字


谢谢

正如@Ed提到的,在寻求解决方案之前,你应该试着自己解决问题。否则,
(\d{4})[-](\(\d{4})[-](\d{4})[-](\d{3,4})
是否应该正确匹配数字,将每个部分存储在捕获组1-4中


如果您需要处理没有分隔符的数字,只需使用
限定符使它们成为可选的:
(\d{4})[-](\(\d{4})[-]?(\d{4})[-]?(\d{3,4})
在bash中,您可以删除任何不是数字的内容,包括:

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

这是非常简单的。那么,您可能想使用正则表达式替换?一些简单的东西,如
(\d{4})[-](\(\d{4})[-](\d{4})[-](\d{3,4})
对于比赛和替换应该能起到作用。我很抱歉,我不擅长正则表达式。如果你能帮助我,我将不胜感激。谢谢mics选择。我修改了你的建议以符合BASH的要求([0-9]{4})[-]([0-9]{4})[-]([0-9]{4})[-]([0-9]{3,4})谢谢@mic My bad。我的错了。我用sed替换了
sed-E的sed/[0-9]{4}[-]([0-9]{4})[-]([0-9]{4})[-]([0-9]{3,4})/\1\2\3\4/g'*
但是如何使用它来重新拼出file@user3148655“你试过”全球标志,
g
sed-i/([0-9]{4})[-]([0-9]{4})[-]([0-9]{4})[-]([0-9]{3,4})/\1\2\3\4/g'file.txt应该可以正常工作。是的。它给了我这个错误。
sed:-e表达式1,char 67:s命令的RHS`@user3148655
sed-e/([0-9]{4})[-]([0-9]{4})[-]([0-9]{4})[-]([0-9]{4})[-]([0-9]{4})[-]([0-9]{3,4}])/\1\2\3\4/g'a.txt对我来说很好。它可以工作。但它不替换文件中的文本,只显示。