Regex 正则表达式匹配:Scala中的长字符串

Regex 正则表达式匹配:Scala中的长字符串,regex,string,scala,Regex,String,Scala,我在val response:string中存储了一个非常长的内存字符串,看起来像 HTTP/1.1200正常 服务器:Apache 其他:标题 ---更多的XML-- 0 我想提取 … 绳子的一部分。到目前为止,我有: "<response>.*?</response>".r findFirstIn response “*?”.r findFirstIn响应 …但出于某种原因,Scala不返回任何值。我确实找到了一种使用索引和slice函数实现这一点的方

我在
val response:string
中存储了一个非常长的内存字符串,看起来像

HTTP/1.1200正常
服务器:Apache
其他:标题



---更多的XML--


0

我想提取



绳子的一部分。到目前为止,我有:

"<response>.*?</response>".r findFirstIn response
“*?”.r findFirstIn响应

…但出于某种原因,Scala不返回任何值。我确实找到了一种使用索引和slice函数实现这一点的方法,但必须有一种使用regex的简洁方法。有人知道怎么做吗?

首先,在处理XML响应时使用XML解析器可能是一个更好的主意。乍一看可能有些过分,但随着项目的发展,很可能最终不得不解析更复杂的XML文档,使用正则表达式比使用成熟的XML解析器要困难得多

无论如何,这个正则表达式可以工作:

"(?s)<response>.*?</response>".r findFirstIn response
“(?s)。*?”.r findFirstIn响应

(?s)
设置参数。

首先,在处理XML响应时使用XML解析器可能是一个更好的主意。乍一看可能有些过分,但随着项目的发展,很可能最终不得不解析更复杂的XML文档,使用正则表达式比使用成熟的XML解析器要困难得多

无论如何,这个正则表达式可以工作:

"(?s)<response>.*?</response>".r findFirstIn response
“(?s)。*?”.r findFirstIn响应

(?s)
设置了。

谢谢,这很有效。我肯定是在使用XML解析器——这个正则表达式只是在我将输入传递到XML生成器之前清理输入:)谢谢,这很有效。我肯定是在使用XML解析器——这个正则表达式只是在我将输入传递到XML生成器之前清理输入:)索引加切片将要快得多。@Jenschauder XML来自可信的源,我知道只有一个元素,所以正则表达式在将输入传递到XML生成器之前会对输入进行清理。不管怎样,Tag Soup的lexer都可以处理输入,甚至一开始都不需要对其进行清理。索引加切片将要快得多。@Jenschauder XML来自可信的源,我知道只有一个元素,所以regex在将输入传递给XML构建器之前先对其进行清理。在任何情况下,Tag Soup的lexer都可以处理输入,甚至一开始都不需要消毒。