【发布时间】:2014-09-17 18:46:39
【问题描述】:
我有一个大文本文件,其中包含 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 查找对话框中使用以下正则表达式进行测试,并检查了 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).)*)
它的作用是查找由返回值包围的日期,然后捕获标题行,最后捕获后面的所有行,前提是没有遇到另一个日期块。后者使用非捕获负前瞻。在最后一步之前,使用 (?s) 启用 DOTALL 设置,包括点元字符中的返回。
在 Find 上面的示例源代码中,第一个注释有效,但第二个注释无效,其中一些行用制表符缩进。 TW 显示此错误:
这就是我卡住的地方。谁能给个提示?
【问题讨论】:
-
您是否尝试将表达式中的空格替换为
\s? -
用
\s替换两个空格会使两个注释都失败。 -
有一些关于 BBEdit 在复杂的正则表达式模式上崩溃的问题(请参阅stackoverflow.com/questions/9952957/…)。也许你可以想办法让它变得更简单?
标签: regex pcre textwrangler