正则表达式在连字符之前和之后获取文本

问题描述 投票:1回答:3

我有这个字符串:

"Common Waxbill - Estrilda astrild"

如何为连字符前后的单词写2个单独的正则表达式?我想要的输出是:

"Common Waxbill" 

"Estrilda astrild"
regex regex-lookarounds
3个回答
5
投票

如果您不能使用look-behind,但是您的字符串始终采用相同的格式且不能包含多个连字符,则可以使用

^[^-]*[^ -]为第一个,\w[^-]*$为第二个(或[^ -][^-]*$,如果连字符后面的第一个非空格不一定是单词字符。

一点点解释:^[^-]*[^ -]匹配字符串的开头(锚点^),后跟任意数量的字符,不是连字符,最后是不是连字符或空格的字符(只是为了从匹配中排除最后一个空格) 。

[^ -][^-]*$采用相同的方法,但反过来说,首先匹配一个既不是空格也不是连字符的字符,后跟任意数量的字符,没有连字符,最后是字符串的结尾(锚点$)。 \w[^-]*$基本相同,它使用更严格的\w而不是[^ -]。这再次用于从匹配中的连字符后排除空格。


6
投票

这很简单:

.*(?= - )     # matches everything before " - "
(?<= - ).*    # matches everything after " - "

请参阅lookaround assertions上的本教程。


0
投票

另一种解决方案是在连字符上进行字符串拆分并删除空格。

© www.soinside.com 2019 - 2024. All rights reserved.