1

我有一个大文本文件,其中包含 TextWrangler 中的一些注释,我想用 Regex 解析并将匹配项写入 CSV 文件以进行 MySQL 导入。这是一个示例源:

ARCHIVE

02.09.2014 22:35 

title1
content
content
content
content

30.08.2014 18:13 

title2
content
    content with tab
    content with tab
content

...
more notes as above
...

每个注释都以日期开头,后面是回车符,然后是标题和一些内容行。我目前正在 TW Find 对话框中使用以下正则表达式进行测试,并检查 Grep 以获取每个注释的日期、标题和内容块:

\r(\d\d\.\d\d\.\d\d\d\d \d\d:\d\d)\s*\r\r(.+)(?s)((?:(?!\r\d\d\.\d\d\.\d\d\d\d \d\d:\d\d\s*\r).)*)

这样做是查找由返回包围的日期,然后捕获标题行,最后捕获后面的所有行,前提是没有遇到另一个日期块。后者使用非捕获负前瞻。在最后一步之前,启用 DOTALL 设置并(?s)在点元字符中包含返回。

使用 Find 上方的示例源代码适用于第一个注释,但不适用于第二个注释,其中一些行用制表符缩进。TW 显示此错误:

在此处输入图像描述

这就是我卡住的地方。谁能给我一个提示?

4

2 回答 2

0

我对该模式进行了更多测试,发现 Regex/Grep 失败确实不可预测。

它似乎与源中的选项卡有关,但可能还有其他文本会触发该错误。例如,我发现在添加 Web url 时,包含选项卡的工作“注释”部分开始失败。

我在从 Snow Leopard 更新的 Mavericks 10.9.4 上使用 TextWrangler 3.5.3。在 Apple Mail 和其他应用程序中,我在这个系统上也遇到了许多晦涩的问题,所以我认为 TW 错误可能与 Mavericks 问题有关。我使用旧版 TW 的原因是我不喜欢左侧的侧边栏。

正如我在评论中所说,关于 BBedit/TW 的 Grep 问题存在 SO 问题,这些问题似乎不是来自 PCRE Regex 引擎本身,而是来自 BBedit 代码。当然,SO对此无能为力。

于 2014-09-19T13:28:43.293 回答
0

不允许评论,我要“回答”……</p>

  • 您的正则表达式在 TW 4.5.9(在 10.9.5)中运行良好。
  • 它在 TW 4.5.9(在 10.9.5 上)中删除了“非捕获”位时也能正常工作。(至少对于比赛来说,就是这样。没有验证它的捕获。)
  • 在 TW 4.5.9 中,Web url 似乎也不会引起问题。

可能

\r(\d{2}\.\d{2}\.\d{4} \d{2}:\d{2})\s*\r\r(.+\r)((.+\r)+)(?!\d{2}\.\d{2}\.\d{4} \d{2}:\d{2}\s*\r)

确实符合您的目的(在 10.9.4 上的 TW 3.5.3 中也是如此。除了在 TW 4.5.9 中的前导/尾随换行符(当然,如果实际需要,可以添加),它的捕获似乎与您的相同)。

于 2014-09-21T10:25:57.850 回答