我有以下数据:
a b c d FROM:<uniquepattern1>
e f g h TO:<uniquepattern2>
i j k l FROM:<uniquepattern1>
m n o p TO:<uniquepattern3>
q r s t FROM:<uniquepattern4>
u v w x TO:<uniquepattern5>
我想要一个正则表达式查询,可以在遇到TO:
时找到FROM:<uniquepattern1>
的内容,因此结果将是uniquepattern2
和uniquepattern3
。
我对正则表达式毫无希望,我会很感激如何编写这个(lookahead参数?)以及不同平台上的正则表达式(例如C#.NET Regex与Grep vs Perl)之间的任何差异,这些可能与此相关。
谢谢。
答案 0 :(得分:2)
尝试:
/FROM:<uniquepattern1>.*\r?\n.*?TO:<(.*?)>/
首先找到FROM锚点,然后使用点通配符。点运算符不匹配换行符,因此这将占用该行的其余部分。然后,非贪婪点通配符匹配消耗到下一个TO并捕获尖括号之间的内容。
答案 1 :(得分:1)
您对文件解析的要求很简单。没有必要使用正则表达式。打开文件进行阅读,查看每行检查FROM:<uniquepattern1>
,获取下一行并打印出来。此外,您的TO
行仅以“:”分隔。因此,您可以将其用作字段分隔符。
例如使用awk
$ awk -F":" '/FROM:<uniquepattern1>/{getline;print $2}' file
<uniquepattern2>
<uniquepattern3>
其他语言/工具也是如此