我正在开发a little tool,它允许我将Github wikis转换为Github页面。现在我正在尝试为Markdown表添加适当的支持(我正在使用的解析器不支持)。
现在我连接到解析器的词法分析器,然后使用各种Github wiki特定的调整(即链接)扩展它,然后将修改后的标记传递回解析器。表格也应符合此方案。我的调整使用各种正则表达式和正则表达式替换,以执行我需要的修改。
不过,我对复杂的表语法有些困惑。你可以找到一个here和here的例子。你可以看到有一些结构,但有些部分是完全可选的。
我已经考虑了一下,我想我想要一个正则表达式,它会输出一个包含标题(第一行),列对齐数据(第二行)和实际内容作为单独组的组。它应包含至少一个内容行以便匹配。标题和对齐数据也必须遵守某些规则,如示例所示。
你会如何建立像这样的正则表达式?更好的是,有人可以为我提供一些建立起点的起点吗?我的方法可能被误导(也许可以避免正则表达式?)。如果是这样,任何导致相同结果的想法都会受到赞赏。
我有同样的问题,从来没有找到合适的答案,我最终想出了以下内容。
^(\|[^\n]+\|\r?\n)((?:\|:?[-]+:?)+\|)(\n(?:\|[^\n]+\|\r?\n?)*)?$
标志是“全局”和“多线”。
虽然它并不是真正基于Sean's answer,但它确实最终变得非常相似,但有一些显着的差异,比如缩短一点,以较少的步骤完成(59和126步,根据regex101.com),并且可能更多“明智的“捕获群体。另外,它也允许“不完整”的表格。 (如同没有“身体”)。 (我在一个单独的答案中添加它的原因是我确实发现它更有用,加上我的自我不允许我这样做);)。
简而言之:
|
字符开头和结尾,并且“单元格对齐”行格式正确。在Java(Android)和这里测试:
和这里:
希望它可以帮助某人。 :)
我需要一个针对同一问题的正则表达式解决方案。这是我到目前为止所做的,将更新它,因为我能够改进它:
|(?:([^\r\n|]*)\|)+\r?\n\|(?:(:?-+:?)\|)+\r?\n(\|(?:([^\r\n|]*)\|)+\r?\n)+
用javascript
测试
我做过的事情:
[|]?(\s+[A-Za-z0-9 -_*#@$%:;?!.,\/\\]+\s+)[|]?[|]?(\s+[A-Za-z0-9 -_*#@$%:;?!.,\/\\]+\s+)[|]?[|]?(\s+[A-Za-z0-9 -_*#@$%:;?!.,\/\\]+\s+)[|]?\r?\n?\|?:-+:\|?:-+:\|?:-+:\|?
-Edit - 全球
\|?:-+:\|?:-+:\|?:-+:\|?\r?\n?
- 修改 - 全局
[|]?(\s+[A-Za-z0-9 -_*#@$%:;?!.,\/\\]+\s+)[|]?[|]?(\s+[A-Za-z0-9 -_*#@$%:;?!.,\/\\]+\s+)[|]?[|]?(\s+[A-Za-z0-9 -_*#@$%:;?!.,\/\\]+\s+)[|]?\r?\n?
- 修饰符 - 全局,多行
这是表,用于解析。
| Tables | Are | Cool |
|:-------------:|:-------------:|:-----:|
| col 3 is | r-l | $1600 |
| col 2 is | centered | $12 |
| zebra stripes | are neat | $1 |
我最终完全跳过了Regex并且使用传统逻辑将它们一起破解。它可能不像基于正则表达式的那样漂亮或短,但至少我可以轻松地保持这一点。
我确实找到了一些可能符合这个目的的正则数据集。见MultiMarkdown。