代码之家  ›  专栏  ›  技术社区  ›  khalidhosain

如何在带有空格的短连字符前后匹配文本字符串[重复]

  •  -1
  • khalidhosain  · 技术社区  · 2 年前

    我的心会继续——席琳·迪翁
    My heart will go on - Celine Dion
    My heart will go on - Celine Dion
    我的心会继续——席琳·迪翁
    我的心会继续——席琳·迪翁
    我的心将落在席琳·迪翁身上

    这就是我的例子字符串。每行必须包含一个短连字符。短连字符前后的空格可以是任意数量的空格,甚至有些行在短连字符前或后没有空格。我需要从每行匹配2组字符串。 My heart will go on Celine Dion 。那么哪个正则表达式可以做到这一点呢?

    /(.*)(\s\-\s)(.*)/gm 当短连字符前后只有一个空格时,该正则表达式可以匹配 ^(.*?)[\p{Zs}\t]+-[\p{Zs}\t]+(.*) 此正则表达式可以匹配短连字符前后任意数量的空格。但当短连字符前后并没有空格时,问题就来了。

    2 回复  |  直到 2 年前
        1
  •  1
  •   Tim Biegeleisen    2 年前

    以下模式似乎正在发挥作用:

    (.*?)(?:\s*-\s*)(.*)
    

    此匹配项:

    • (.*?) 之前但不包括的所有内容
    • (?:\s*-\s*) 可选空白、连字符和可选空白
    • (.*) 所有剩余内容

    Demo

        2
  •  0
  •   Ted Lyngmo    2 年前
    (.*?)\s*-\s*(.*)
    

    两个捕获:

    • (.*?) -任何字符的零个或多个非贪婪捕获
    • \s* -零个或多个空白
    • - -字面意思 -
    • \s* -零个或多个空白
    • (.*) -捕获其余部分

    Demo