【问题标题】:Regex only 14 numbers正则表达式只有 14 个数字
【发布时间】:2015-11-15 14:07:07
【问题描述】:

我有以下文字:

DiretorioXmlImpressao=C:\\Program Files (x86)\\TESTE\\XmlImpressao\\08187168000160\\

我想选择除CNPJ(文本末尾的14个字符的句子)之外的所有内容,因此我尝试了以下正则表达式:

DiretorioXmlImpressao=[^0-9]+

返回:

DiretorioXmlImpressao=C:\\Program Files (x

但我期待:08187168000160


对不起各位,我有一些正则表达式的经验,我只是表达得不太好。

我实际上想要这样做返回:

DiretorioXmlImpressao=C:\\Program Files (x)\\TESTE\\XmlImpressao\\

因为我只想要 14 个字符和 \,因为我可以在此替换中使用。除非路径中有数字,例如“x86”,否则这是有效的。

regexp_replace(teste,'DiretorioXmlImpressao=[^0-9]+',E'DiretorioXmlImpressao=P:\\TESTE\\XmlImpressao\\','ig');

我的正则表达式和替换的最终预期结果如下

DiretorioXmlImpressao=P:\\TESTE\\XmlImpressao\\08187168000160\\

谢谢!

【问题讨论】:

  • 你试过/DiretorioXmlImpressao=.*?([0-9]+)\\$/
  • 您是在告诉您的正则表达式获取不是数字 0-9 的所有内容。它正在做你告诉它做的事情......
  • 如果你只需要开始部分also try like this.

标签: regex regular-language


【解决方案1】:

在没有匹配组的情况下,我还没有找到一种有品味的方法。

选择文本末尾的 14 个字符以外的所有句子

对我来说意味着这个(嗯,添加了最后的反斜杠,正如我假设你想要的那样):

/^(.*)[0-9]{14}\\$/

【讨论】:

    【解决方案2】:

    使用这种模式:

    /^(.*)([^\\]+\\?)$/
    

    它将返回除结尾以外的部分作为第一个分组匹配,并将结尾部分作为第二个。

    如果您不想要第二个匹配的部分,请将第二组更新为:

    /^(.*)(?:[^\\]+\\?)$/
    

    【讨论】:

      【解决方案3】:

      我已经像说要做的泡泡一样测试了这个

      DiretorioXmlImpressao=.*\D(?=\d)
      

      它就像我想要的那样工作

      DiretorioXmlImpressao=C:\\Program Files (x86)\\TESTE\\XmlImpressao\\
      

      谢谢大家!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多