Regex 与环视相关的正则表达式

Regex 与环视相关的正则表达式,regex,regex-lookarounds,Regex,Regex Lookarounds,设计一个正则表达式来提取子字符串的前两位数字,其中: 以字母结尾 从2开始 因此,从“234b342d3”,匹配结果应该是: 23(来自234b) 2d(来自2d) 我的近似答案是“(?=1.*)[a-zA-Z]”,但看起来好像不起作用 非常感谢您的每一个回复。我想您的意思是(?=2.*)。 (?=2.*)表示下一个字符是2,后跟一个或多个任意字符。但是,正则表达式说下一个字符必须是[a-zA-Z],因此任何字符都不会匹配(因为一个字符不能同时是2和[a-zA-Z]) 仅仅删除前瞻(2.*[a-

设计一个正则表达式来提取子字符串的前两位数字,其中:

  • 以字母结尾
  • 从2开始
  • 因此,从
    “234b342d3”
    ,匹配结果应该是:
    23
    (来自
    234b

    2d
    (来自
    2d

    我的近似答案是
    “(?=1.*)[a-zA-Z]”
    ,但看起来好像不起作用


    非常感谢您的每一个回复。

    我想您的意思是
    (?=2.*)。

    (?=2.*)
    表示下一个字符是
    2
    ,后跟一个或多个任意字符。但是,正则表达式说下一个字符必须是
    [a-zA-Z]
    ,因此任何字符都不会匹配(因为一个字符不能同时是
    2
    [a-zA-Z]

    仅仅删除前瞻(
    2.*[a-zA-Z]
    )是朝着正确方向迈出的一步,但以下内容仍然是错误的:

    • 不会将前2个字符放在一个组中,以便您可以提取它
    • 贪婪匹配(
      *
      将贪婪匹配,因此
      234b342d
      而不仅仅是
      234b
      ,而
      2d
      将不匹配,因为它已被上一次匹配覆盖)
    因此,将前2个字符放在括号中,将其放在一个组中,并添加非贪婪匹配(
    *?
    ,而不是
    *
    )(
    (2.).*?[a-zA-Z]
    )。但现在:

    • 2后面跟一个字母不匹配
    因此,我们需要添加“向后看”来解释这一点

    所以我们最终得到:

    (2.)((?<=[a-zA-Z])|.*?[a-zA-Z])
    

    (2.)(?您的示例没有以字母结尾。请提供更多细节,例如,关于如何创建匹配结果。我的意思是提取一些包含字母的子字符串“234B34D3”。结果“23”是字符串“234b”的前两位数字。结果“2d”是字符串“2d”的前两位数字.非常感谢!!我终于知道环顾四周是如何工作的了。今天真是美好的一天。每个不懂环顾四周的人都应该看看这篇文章。