【问题标题】:RegEx to replace entire string with first two values正则表达式用前两个值替换整个字符串
【发布时间】:2021-06-25 17:17:27
【问题描述】:

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

  • 整个字符串:AO SMITH 100108283 4500W/240V 旋入式元件,11"

  • 前两个值:AO SMITH

  • 整个字符串:BRA14X18HEBU / P11-042 / 310-470NL BRASS 1/4 x 1/8 HEX 衬套

  • 前两个值:BRA14X18HEBU / P11-042

  • 整个字符串:两孔管带 4" 008004EG 72E 4

  • 前两个值:两孔管道

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

这是我目前所得到的:

匹配值:

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

新价值:

$1 $2

【问题讨论】:

    标签: regex regexp-replace


    【解决方案1】:

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

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

    模式匹配:

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

    如果连字符超过 1 个,您可以使用 * 代替 ?

    Regex demo

    输出

    AO SMITH
    BRA14X18HEBU / P11-042
    TWO-HOLE PIPE
    

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

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

    Regex demo

    【讨论】:

    • 这行得通!尽管如果有超过 1 个连字符和/或 1 个斜杠,那么新的替换规则究竟会是什么样子?会不会是这样:^(\w+(:-\w+)*(: +\/)* +\w+(:-\w+)).+
    • @Marc 我添加了更广泛的匹配 regex101.com/r/4cLhoz/1 或者实际上您可以使用 * 作为量词 regex101.com/r/rULAtN/1
    • @The_forth_bird 谢谢!让我试试这个。感谢您的帮助!
    • @Marc 如果只能有空格或/,你也可以在字符类中指定那些^(\w+(?:-\w+)*[\/ ]+\w+(?:-\w+)*).+regex101.com/r/O9pljd/1
    • @The_forth_bird 更广泛的匹配成功了!再次感谢您!
    猜你喜欢
    • 1970-01-01
    • 2019-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-26
    • 1970-01-01
    • 2018-07-13
    • 1970-01-01
    相关资源
    最近更新 更多