首页 > 解决方案 > 按字符分隔符和子元素分割行

问题描述

在这个字符串中:

#animal the cat   #tree palm tree

我要匹配

#animal  
the cat

#tree  
palm tree

我找到了几种方法来匹配第一个,但我在第二个 # 字符处停止并从那里继续时遇到问题。

(?<=#)(\w*)\s(.*)(?!#)

发现只有一个匹配捕获所有内容,#animal直到结束。

将标签旁边的捕获器延迟捕获标签

(?<=#)(\w*)\s(.*?)(?!#)

我错过了什么?

标签: regex

解决方案


你需要

(#\w+)\s+(.*?)(?=#\w|$)

请参阅正则表达式演示

如果可能有换行符,您可以替换.[\s\S]/ [\w\W]/ [\d\D]/(?s:.*?)或只是在模式前加上(?s).

详情

  • (#\w+)- 第 1 组:一个#字符,然后是一个或多个单词字符
  • \s+- 一个或多个空格
  • (.*?)- 第 2 组:除换行符之外的任何零个或多个字符尽可能少
  • (?=#\w|$)- 紧靠右边,必须有#一个或多个单词字符或字符串结尾。

推荐阅读