首页 > 解决方案 > 正则表达式解析scala中两个字符串之间的行

问题描述

我有一个自由格式的文本文件(不是 XML),我想从中解析两个模式之间的线条。这是示例数据

<Hi>
col1 col2 col3
1 2 3 
4 5 6
helo how are 

<How>
col1 col2
1 2 
helo hi'

我想将每个标签 ie<Hi>blank行之间的数据解析为单个字符串。同样将<How>blank行之间的数据作为另一个字符串。

到目前为止我尝试的正则表达式模式不起作用。

val pattern = "^<Hi>(.*)\\n"
val pattern = "^<Hi>(.*)\\s*$"
val pattern = "^<Hi>(.*)"
val pattern = "^<Network>(.*)((\\r\\n|\\n|\\r)$)|(^(\\r\\n|\\n|\\r))|^\\s*$"

有没有办法可以为空行指定模式。任何帮助表示赞赏。

标签: regexscala

解决方案


您可以使用此正则表达式并从 group1 捕获您的数据,

<[^>]+>\s*([\w\W]*?(?=\n\n|$))

正则表达式演示

解释:

  • <[^>]+>\s*<[^>]+>- 使用和可选的空格开始捕获标签\s*
  • ([\w\W]*?- 以非贪婪的方式捕获任何字符,包括换行符
  • (?=\n\n|$))- 积极向前看,以确保比赛在看到两个换行符或字符串的绝对结尾时立即停止

推荐阅读