谁能建议一个匹配 4 个连续文本行的正则表达式模式?
我正在尝试解析一个大数据文件。在该文件中,有 3 行或 4 行数据组,由空行分隔。例如:
Data Group One Name
Data Group One Datum 1
Data Group One Datum 2
Data Group One Datum 3
Data Group Two Name
Data Group Two Datum 1
Data Group Two Datum 2
Data Group Three Name
Data Group Three Datum 1
Data Group Three Datum 2
Data Group Three Datum 3
我正在寻找一种快速方法来提取具有 4 行的所有数据组(忽略所有 3 行组)。有没有办法使用正则表达式查找文本文件中所有 4 行组?或者任何其他建议的(也许使用 awk 或 sed 的东西)方法来做到这一点?
I am trying to parse a large data file. In the file there are groups of either 3 or 4 lines of data separated by a blank line. Eg:
Data Group One Name
Data Group One Datum 1
Data Group One Datum 2
Data Group One Datum 3
Data Group Two Name
Data Group Two Datum 1
Data Group Two Datum 2
Data Group Three Name
Data Group Three Datum 1
Data Group Three Datum 2
Data Group Three Datum 3
I am looking for a quick way to extract all groups of data that have 4-lines (ignoring all of the 3-line groups). Is there a way with regex to find all groups of 4-lines in a text file? Or any other suggested (perhaps something using awk or sed) methods to do this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
不是很漂亮,但这应该可以:
/[^\n]+\n[^\n]+\n[^\n]+\n[^\n]+(?!(?:\n [^\n]+))/
或
/(?:[^\n]+\n){3}[^\n]+(?!(?:\n[^\ n]+))/
基本上,您正在寻找一个或更多非换行符,然后是一个新行,一个或多个非换行符,然后是一个新行,等等。
编辑:修复了我的正则表达式,它匹配超过 4 行的块。我为另一行文本添加了否定前瞻。
Not really pretty but this should work:
/[^\n]+\n[^\n]+\n[^\n]+\n[^\n]+(?!(?:\n[^\n]+))/
or
/(?:[^\n]+\n){3}[^\n]+(?!(?:\n[^\n]+))/
Basically, you're looking for one or more non-new-line characters, then a new line, one or more non-new-line character, then a new line, etc.
EDIT: Fixed my regex, it matched for blocks of more than 4 lines. I added a negative lookahead for another line of text.
我还没有测试过它,但这应该适用于 awk 脚本:
I haven't tested it, but this should work for an awk script:
您可以解决换行符 - 伪代码示例:
You could work around line break characters - pseudo code example:
这将捕获 1 行、2 行和 3 行。
这是贪婪的匹配。
如果您需要 3 或 4 行,您可以使用:
或者您可以使用:
我已经在 https://regex101.com/ 中测试了它
this will capture 1 line, 2 lines and 3 lines.
this is greedy matches.
if you need 3 or 4 lines you can use:
or you can use:
I have tested it in https://regex101.com/