挑战:用正则表达式将整个 MarkDown 文件按照标题#拆分成子字符串

2021-07-19 19:38:25 +08:00
 AndyAO

也就是按照标题进行拆分,将每个标题 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]))

1001 次点击
所在节点    程序员
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/790454

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX