22

我有这个字符串:

城市 - 这是一些文本。这是更多 - 并继续在这里。

我想在第一个 ' - ' 处拆分字符串以找到 'city' (只是一个示例词,也可以是其他词)。加上查找' - '之后的其余文本。

我构造了这个表达式:

(^[\D\W\S]*)( - )([\D\W\S]*)

但这会找到最后一次出现的 ' - ' 而不是第一个。

我怎样才能在第一次出现时停止?

4

1 回答 1

41

最简单的解决方案是明确禁止破折号成为第一组的一部分:

^([^-]*) - (.*)

解释:

^        # Start of string
([^-]*)  # Match any number of characters except dashes
\ - \    # Match a dash (surrounded by spaces)
(.*)     # Match anything that follows

但是,如果您的字符串可以 在第一组中包含破折号(只是没有被空格包围),这将失败。如果是这种情况,那么您可以使用惰性量词:

^(.*?) - (.*)

解释:

^        # Start of string
(.*?)    # Match any number of characters, as few as possible
\ - \    # Match a dash (surrounded by spaces)
(.*)     # Match anything that follows
于 2012-05-12T20:40:25.930 回答