也就是按照标题进行拆分,将每个标题 1,及其下辖内容,变成独立的字符串。
由于是挑战的性质,所以要求只调用正则表达式引擎 1 次就完成任务。
怎么才算赢呢?只要指出优越性就行,也许是性能,也许是可读性。
如果你想挑战的话可以试试看。
至于我的答案嘛,就放在最后了。
如果放 Match 对象,那么又要重复原文内容,这里放个图吧。
# 0
Content 0
## 0.0
Content 0.0
### 0.0.0
Content 0.0.0
#### 0.0.0.0
Content 0.0.0.0
### 0.0.1
Content 0.0.1
### 0.0.2
Content 0.0.2
## 0.1
Content 0.1
## 0.2
### 0.2.0
Content 0.2.0
### 0.2.1
Content 0.2.1
## 0.3
# 2
Content 2
# 3
Content 3
# 4
Content 4
我的答案是这样的,用捕获组是为了提取,也是为了加个分隔和注释,方便阅读。
C#的正则引擎对各种高级特性支持都比较好,我平常又比较常用,所以用的是这个。
断言在某些引擎上运行可能会失败,不要高估了正则表达式在不同引擎上的兼容性。
^(?<TitleSymbol>#)( )(?<Title>.+)(\n)(?<Content>[\s\S]+?)((?=(\n# ))|(?![\s\S]))
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.