Regex 正则表达式以排除第一次出现下划线和最后一次出现连字符之间的文本

Regex 正则表达式以排除第一次出现下划线和最后一次出现连字符之间的文本,regex,Regex,我正在寻找一个正则表达式来匹配 直到(包括)第一次出现下划线为止的文本 及 最后一次出现连字符后的文本,但剪切所有字符 前导零 样本输入: Text\u un\u重要-0011 所需结果(通过关联所有匹配项): Text\u 11 我提出了:(?:^ |(?:00))(.+?)(?:$|),但它有一些缺陷:只有在末尾正好有一个连字符和两个前导零的情况下才有效。很遗憾,我无法修复它。如果您遵循当前的逻辑,您可以使用 ^[^_]*_|[1-9]\d*$ 看详细信息: ^-字符串的开头 [^\

我正在寻找一个正则表达式来匹配

  • 直到(包括)第一次出现下划线为止的文本 及
  • 最后一次出现连字符后的文本,但剪切所有字符 前导零
  • 样本输入:

    Text\u un\u重要-0011
    
    所需结果(通过关联所有匹配项):

    Text\u 11
    

    我提出了:
    (?:^ |(?:00))(.+?)(?:$|)
    ,但它有一些缺陷:只有在末尾正好有一个连字符和两个前导零的情况下才有效。很遗憾,我无法修复它。

    如果您遵循当前的逻辑,您可以使用

    ^[^_]*_|[1-9]\d*$
    
    详细信息

    • ^
      -字符串的开头
    • [^\u]*
      -0个或更多字符,而不是
      ,然后
    • 字符
    • |
      -或
    • [1-9]
      -非零位
    • \d*
      -0或更多数字
    • $
      -字符串结尾
    您也可以使用替换逻辑:

    查找
    .*-0*

    替换

    看。
    .*-0*
    模式匹配

    • -下划线
    • *
      -除换行符以外的任何0个或更多字符,尽可能多
    • -
      -连字符
    • 0*
      -零个或更多
      0
      字符

    由于使用了第一个
    \uu
    ,因此替换模式应为
    \u
    ,因此,您希望捕获第一个单词和最后一个不为零的数字:

    ([\w\d]+)(_[\w\d]+)*(-0*)(\d+)
    
    使用第一个和最后一个捕获的组

    • ([\w\d]+)捕获可能有数字的单词(例如word1)
    • ([\w\d]+)*捕获单词的重复(例如单词1和其他单词2和3)
    • (-0*)捕获后跟连续零的连字符(例如-00000000)
    • (\d+)捕获连续零后面的所有数字