【问题标题】:Match pattern anywhere in string?匹配字符串中任何地方的模式?
【发布时间】:2022-01-07 05:08:27
【问题描述】:

我想匹配以下模式:

Exxxx49 (where x is a digit 0-9)

例如,E123449abcdefghabcdefE123449987654321 都有效。即,我需要匹配字符串中任意位置的模式。

我正在使用:

^*E[0-9]{4}49*$

但它只匹配E123449

如何在模式前面或后面允许任意数量的字符?

【问题讨论】:

  • 什么工具,你用什么方法来匹配模式和字符串?锚定很大程度上取决于它的实现。
  • * 替换为.*

标签: regex


【解决方案1】:

删除^$ 以搜索字符串中的任何位置。

在您的情况下,* 可能不是您想要的; E[0-9]{4}49 应该足够了。这将在字符串中的任意位置找到一个 E,后跟四个数字,然后是一个 4 和一个 9。

【讨论】:

    【解决方案2】:

    我会去

    ^.*E[0-9]{4}49.*$
    

    编辑:

    因为它满足了 OP 的所有需求状态。

    • “[匹配] Exxxx49(其中 x 是数字 0-9)”
    • “允许在模式前后任意数量的字符”

    会匹配

    • ^.* 一切从,包括行首
    • E[0-9]{4}49 请求的模式
    • .*$ 模式之后的所有内容,包括行尾

    【讨论】:

      【解决方案3】:

      您的原始正则表达式在第一个 * 处存在正则表达式模式语法错误。修复它并将其更改为:

      .*E\d{4}49.*
      

      此模式用于匹配已锚定的引擎(大多数引擎),例如 Java。由于您忘记指定语言。

      • .* 匹配任意数量的序列。因为它围绕着匹配,所以只要这个匹配位于字符串中,它就会匹配整个字符串。

      这是regex demo

      【讨论】:

      • 没必要这么贪
      【解决方案4】:

      只需简单地使用这个:

      E[0-9]{4}49
      

      【讨论】:

      • 您的答案在低质量的帖子队列中。请解释为什么这会回答 OP 的问题。
      【解决方案5】:

      如何在模式前面或后面允许任意数量的字符?但它只匹配E123449

      如果语言支持,请使用 global 标志 /E\d{4}49/g

      尝试使用capturing groups (E\d{4}49)+ 分组,用括号括起来(...)

      这里是online demo

      【讨论】:

        猜你喜欢
        • 2012-08-22
        • 1970-01-01
        • 2011-05-12
        • 1970-01-01
        • 2022-11-02
        • 1970-01-01
        相关资源
        最近更新 更多