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如何在字母和数字之间插入连字符;并删除两个字母之间的连字符
RegEx Tokenizer:将文本拆分为单词、数字、标点和空格(不要删除任何内容)