RegEx 用前两个值替换整个字符串

RegEx to replace entire string with first two values

我正在尝试想出一个正则表达式来仅用前两个值替换整个字符串。示例:

注意事项是我想保留任何类型的特殊字符而不计算它们,例如“/”和“-”。我编写的当前代码没有,而是将新值完全留空。只有上面的第一个例子有效。

这是我目前得到的:

匹配值:

^(\w+) +(\w+).+$

新值:

 

一个选项可能是使用单个捕获组并在替换中使用它。

^(\w+(?:-\w+)?(?: +\/)? +\w+(?:-\w+)?).+

模式匹配:

  • ^ 字符串开头
  • ( 捕获 组 1
    • \w+(?:-\w+)?用可选部分匹配 1+ 个单词字符以匹配 - 和 1+ 个单词字符
    • (?: +\/)? 可选匹配 /
    • +\w+(?:-\w+)? 匹配 1+ 个单词字符和可选部分以匹配 - 和 1+ 个单词字符
  • ) 关闭组 1
  • .+ 匹配任何字符 1 次以上(该行的其余部分)

如果连字符可以超过 1 个,则可以使用 * 而不是 ?

Regex demo

输出

AO SMITH
BRA14X18HEBU / P11-042
TWO-HOLE PIPE

更广泛的匹配可以匹配单词之间的非单词字符

^(\w+(?:-\w+)*[\W\r\n]+\w+(?:-\w+)*).+

Regex demo