Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何使用正则表达式选择多行?_Regex_Grep_Preg Replace - Fatal编程技术网

Regex 如何使用正则表达式选择多行?

Regex 如何使用正则表达式选择多行?,regex,grep,preg-replace,Regex,Grep,Preg Replace,我必须格式化5万行聊天日志 源文件为纯文本,如下所示: 13. Mär. 01:32 - Walter: Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. 13. Mär. 06:15 - Horst: Lorem ipsum

我必须格式化5万行聊天日志

源文件为纯文本,如下所示:

13. Mär. 01:32 - Walter:  
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.

 13. Mär. 06:15 - Horst:  
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, 
sed diam nonumy eirmod tempor invidunt ut labore et 
dolore magna aliquyam erat, sed diam voluptua.
magna aliquyam erat, sed diam voluptua.
整个谈话中只有两个人——沃尔特和霍斯特。 我需要两个正则表达式,一个从Walter选择所有聊天文本,另一个从Horst选择所有聊天文本

Walter的正则表达式应从示例中选择以下文本:

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, 
sed diam nonumy eirmod tempor invidunt ut labore et 
dolore magna aliquyam erat, sed diam voluptua.
magna aliquyam erat, sed diam voluptua.
Horst的正则表达式应从以下示例中选择此文本:

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, 
sed diam nonumy eirmod tempor invidunt ut labore et 
dolore magna aliquyam erat, sed diam voluptua.
magna aliquyam erat, sed diam voluptua.
对我来说,重要的是只选择文本行,而不是日期/时间/人员行

更新 首先,感谢您的快速回复。不幸的是,这并不能解决我的问题。 聊天文本有不同的数字行

不知何故,我无法从你的例子中得到一个选择

我在这里试过:

我试过这样做: 沃尔特:。\n(.)

这将选择Walter:和第一行。有没有办法不选择沃尔特:

(我需要它来使用文本格式格式化Indesign文档)

在此处尝试:

我已经修改了正则表达式,以便可以处理您的数据,但是您的数据仍然没有很好的结构,尽管不可能编写一个与之正确匹配的正则表达式。这实际上是两个问题

  • 如何跨换行符进行匹配(在问题标题中询问)
  • 如何进行丢弃日期/时间/人员的匹配(在中询问 (问题机构)
  • 我将回答问题1:

    在进行匹配之前,您需要更改行分隔符/记录分隔符

    此分隔符依赖于工具(它不是正则表达式语言本身的一部分)。例如,对于awk,您可以更改RS变量(您可以将其设置为多个字符,例如冒号+换行符)。对于GNU grep,您可以使用-z。请参阅上的详细讨论

    以下是我的解决方案:

    awk '$5~/Walter:$/{p=1} $5!~/Walter:$/&&$5~/:$/{p=0} p'
    

    要过滤空行和日期行,请通过管道

    awk '$5!~":$"&&NF>0'