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

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

3756-4564-2323-3435
3756 6432 3233 435

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

谢谢

【问题讨论】:

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

标签: regex bash credit-card


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    如果您需要处理还没有分隔符的数字,只需使用 ? 限定符将它们设为可选:(\d{4})[ -]?(\(\d{4})[ -]?(\d{4})[ -]?(\d{3,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 适合我。
    • 它有效。但它不会替换文件中的文本,只会显示。
    猜你喜欢
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 2012-08-12
    • 2017-10-25
    • 2017-12-24
    • 2011-08-28
    • 2020-04-05
    相关资源
    最近更新 更多