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都可以处理输入,甚至一开始都不需要消毒。