捕捉组,用破折号隔开

时间:2019-02-13 21:30:27

标签: regex

我想在文件名中捕获一个名称,该名称用短划线隔开,并用空格括起来。但是,不同之处在于该名称可以包含不包含空格的破折号。这是一个示例:

My Document - John Doe - English - Whatever.docx
My Document - Marie-Pierre Smith - French - Whatever.docx

我想抓住John DoeMarie-Pierre Smith。 名称将始终在该位置。这是我到目前为止的位置:https://regex101.com/r/zmIoNQ/2

^([\d\w ]*){1} - ([\w ]*){1} - [\d\w -.]*$

1 个答案:

答案 0 :(得分:1)

您可以只使用1个捕获组来捕获单词字符,而连字符和后面的单词字符是可选的。可以在前面加上空格来重复该部分。

请注意,您可以省略这些量词{1}

^[\d\w ]*- (\w+(?:-\w+)?(?: \w+(?:-\w+)?)?) -

Regex demo

说明

  • ^[\d\w ]*-从字符串的开头匹配charater类中列出的字符,然后匹配-
  • (开始捕获组
    • \w+(?:-\w+)?将1个以上的单词字符与一个可选的组进行匹配,以匹配-之后的1个以上字符的字符
    • (?:未捕获
      • \w+(?:-\w+)?匹配一个空格,超过1个单词 字符,其可选部分与-和1个以上的字符字符匹配
    • )?关闭组并将其设置为可选
  • )关闭捕获组
  • -匹配空间和-