我有这个字符串:
"Common Waxbill - Estrilda astrild"
如何为连字符前后的单词写2个单独的正则表达式?我想要的输出是:
"Common Waxbill"
和
"Estrilda astrild"
如果您不能使用look-behind,但是您的字符串始终采用相同的格式且不能包含多个连字符,则可以使用
^[^-]*[^ -]
为第一个,\w[^-]*$
为第二个(或[^ -][^-]*$
,如果连字符后面的第一个非空格不一定是单词字符。
一点点解释:^[^-]*[^ -]
匹配字符串的开头(锚点^
),后跟任意数量的字符,不是连字符,最后是不是连字符或空格的字符(只是为了从匹配中排除最后一个空格) 。
[^ -][^-]*$
采用相同的方法,但反过来说,首先匹配一个既不是空格也不是连字符的字符,后跟任意数量的字符,没有连字符,最后是字符串的结尾(锚点$
)。 \w[^-]*$
基本相同,它使用更严格的\w
而不是[^ -]
。这再次用于从匹配中的连字符后排除空格。
这很简单:
.*(?= - ) # matches everything before " - "
(?<= - ).* # matches everything after " - "
请参阅lookaround assertions上的本教程。
另一种解决方案是在连字符上进行字符串拆分并删除空格。