代码之家  ›  专栏  ›  技术社区  ›  Tito Sanz

返回给定数量的匹配正则表达式

  •  0
  • Tito Sanz  · 技术社区  · 6 年前

    我想要一个只返回前两个匹配项的正则表达式。在这个字符串中,所需的表达式应该只返回“Miles Teller”和“J.K.Simmons”,而不是所有匹配项“Miles Teller”、“J.K.Simmons”、“Melissa Benoist”。。。

    'name': 'Miles Teller', 'name': 'J.K. Simmons', 'order': 1, 129104,
     'name': 'Melissa Benoist', 'order': 2, 'profile_path':  970216,
     'name': 'Austin Stowell', 'order': 'gender': 2, 'id': 223012, 'name':
     'Jayson Blair', 'order': 4, 'profile_path':
    

    (?<='name': ')([^']*) {2}

    regex101中的示例: https://regex101.com/r/FRN7ei/1/

    3 回复  |  直到 6 年前
        1
  •  1
  •   Pushpesh Kumar Rajwanshi    6 年前

    使用look behind或look ahead将使您能够满足正则表达式的所有匹配。

    仅捕获 name .* 在regex的末尾,会消耗剩余的文本,以避免留下进一步捕获更多名称的机会。

    'name': '([^']*)'.*?'name': '([^']*)'.*
    

    Demo

    .* 在regex中不使用全局修饰符时,不需要使用regex中的。感谢 sln 我差点忘了提醒我:)

        2
  •  1
  •   James Davis    6 年前

    /'name': '([^']+)', 'name': '([^']+)'/ ?

        3
  •  0
  •   Mixolydian    6 年前

    这看起来不像是一个有效的字典/对象,但是假设这只是一个看起来像字典/对象的字符串,您可以使用类似于上面的内容提取所有名称:

    (?<='name': ')[^']+
    

    然后将其保存到一个列表或数组中,并使用普通列表索引/切片获得前两个匹配项。