正则表达式在第二次破折号后删除所有内容

标签 regex

我有大量数据需要使用正则表达式进行过滤。数据由如下所示的字符串组成:

60166213

60173866-4533

60167323-9439-1259801

NL170-2683-1262201

60174710-1-A12-4

当我需要它们看起来像这样时:
60166213

60173866-4533

60167323-9439

NL170-2683

60174710-1

如何使用正则表达式进行过滤以删除包括第二个破折号在内的所有内容。破折号的数量各不相同,我需要“按原样”保留所有不包含多个破折号的字符串。

最佳答案

您可以使用这样的简单正则表达式:

(.*?-.*?)-.*

Working demo

enter image description here

您可以查看 代码生成器 链接不同语言的代码。对于 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/

相关文章:

java - 编写正则表达式来查找连续字符 'o'

正则表达式:捕获括号内的任何内容,以及嵌套括号

javascript - 使用正则表达式进行模糊搜索

python - (?ui) 在 Python 正则表达式中意味着什么?

java - 在 Java 中从列表中提取子字符串

python - 有没有办法在 Pandas 中自定义清理一行?

regex - 如何转到 Vim 搜索模式的最后一个匹配项

regex - PowerShell -replace 获取两个不同字符之间的字符串

Java 正则表达式验证

javascript - 我的 URL 正则表达式允许空格但不应该