如何匹配短连字符(含任意空格或无空格)前后的文本?正则表达式需求
正则匹配解决方案
示例字符串
My heart will go on - Celine Dion My heart will go on - Celine Dion My heart will go on - Celine Dion My heart will go on -Celine Dion My heart will go on- Celine Dion My heart will go on-Celine Dion
需求
每行包含一个短连字符,连字符前后空格数量不限(可无),需要从每行提取两组字符串:My heart will go on 和 Celine Dion。
可行的正则表达式
^(.*?)\s*-\s*(.*)$
搭配全局多行模式(gm),可匹配所有行并按行处理。
正则说明
^和$:锚定每行的开头与结尾,确保整行内容被匹配(.*?):非贪婪匹配模式,精准提取连字符前的目标内容,避免过度匹配后续字符\s*:匹配0个或任意数量的空白字符(包括空格、制表符等),覆盖连字符前后有空格、无空格的所有场景-(.*)$:匹配短连字符后,用贪婪模式提取该行剩余的目标内容
对比原有正则的问题
/(.*)(\s\-\s)(.*)/gm:仅能匹配连字符前后各有一个空格的情况,因为\s\-\s强制要求连字符前后必须有且仅有一个空格^(.*?)[\p{Zs}\t]+-[\p{Zs}\t]+(.*):要求连字符前后至少有一个空白字符(+表示至少一次),无法处理连字符前/后无空格的场景
内容的提问来源于stack exchange,提问作者khalidhosain
相关产品推荐
相关产品推荐

