我想在文件名中捕获一个名称,该名称用短划线隔开,并用空格括起来。但是,不同之处在于该名称可以包含不包含空格的破折号。这是一个示例:
My Document - John Doe - English - Whatever.docx
My Document - Marie-Pierre Smith - French - Whatever.docx
我想抓住John Doe
和Marie-Pierre Smith
。
名称将始终在该位置。这是我到目前为止的位置:https://regex101.com/r/zmIoNQ/2
^([\d\w ]*){1} - ([\w ]*){1} - [\d\w -.]*$
答案 0 :(得分:1)
您可以只使用1个捕获组来捕获单词字符,而连字符和后面的单词字符是可选的。可以在前面加上空格来重复该部分。
请注意,您可以省略这些量词{1}
^[\d\w ]*- (\w+(?:-\w+)?(?: \w+(?:-\w+)?)?) -
说明
^[\d\w ]*-
从字符串的开头匹配charater类中列出的字符,然后匹配-
(
开始捕获组
\w+(?:-\w+)?
将1个以上的单词字符与一个可选的组进行匹配,以匹配-
之后的1个以上字符的字符(?:
未捕获
\w+(?:-\w+)?
匹配一个空格,超过1个单词
字符,其可选部分与-
和1个以上的字符字符匹配)?
关闭组并将其设置为可选)
关闭捕获组-
匹配空间和-