我有大量数据需要使用正则表达式进行过滤。数据由如下所示的字符串组成:
60166213
60173866-4533
60167323-9439-1259801
NL170-2683-1262201
60174710-1-A12-4
当我需要它们看起来像这样时:
60166213
60173866-4533
60167323-9439
NL170-2683
60174710-1
如何使用正则表达式进行过滤以删除包括第二个破折号在内的所有内容。破折号的数量各不相同,我需要“按原样”保留所有不包含多个破折号的字符串。
最佳答案
您可以使用这样的简单正则表达式:
(.*?-.*?)-.*
Working demo
您可以查看 代码生成器 链接不同语言的代码。对于
php
使用 PCRE(Perl Comptaible RegEx)引擎,您可以使用:$re = "/(.*?-.*?)-.*/";
$str = "60166213\n\n60173866-4533\n\n60167323-9439-1259801\n\nNL170-2683-1262201\n\n60174710-1-A12-4";
$subst = "\1";
$result = preg_replace($re, $subst, $str);
关于正则表达式在第二次破折号后删除所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28551777/