regex程序搜索带有空格和反斜杠的字符串性能问题

8mmmxcuj  于 2021-05-27  发布在  Spark
关注(0)|答案(2)|浏览(398)

以下是我的几行文字:

Region\ name=Provence\ Alpes\ Cote\ d'Azur shops=350,City=Nice 12345
Region\ name=Provence\ Alpes\ Cote\ d'Azur,City=Nice shopsabcdabcdabcdasssss=350 13456
City=Nice,Region\ name=Provence\ Alpes\ Cote\ d'Azur shopsabcdabcdabcdasssss=350 23456

输入:区域\名称
输出:普罗旺斯\alpes\cote\d'azur
输入:城市
输出:不错
以下解决方案提供了结果:

val data =List("Region\\ name=Provence\\ Alpes\\ Cote\\ d'Azur shops=350,City=Nice"
                ,"Region\\ name=Provence\\ Alpes\\ Cote\\ d'Azur,City=Nice shopsabcdabcdabcdasssss=350"
                ,"City=Nice,Region\\ name=Provence\\ Alpes\\ Cote\\ d'Azur shopsabcdabcdabcdasssss=350"
                ,"City=Nice,Region\\ name =unknown shops=350")
               //With that, let's extract all the values where target is the key.
val target  = """Region\\ name"""
val pattern =raw"$target\s*=((?:[\w'\\ -]+)+)(?:[ ,]+\w+=|,|$$)".r.unanchored
val output  = data.collect{ case pattern(m) => m }

但是通过使用提取结果需要更多的时间或挂起 .r.unanchored 当有一根长长的绳子 shopsdddasssss 或者 shopsdddasssssssssssssssssssssss .
它能被更好的代码所取代吗?已经解决了,谢谢你的回答
regex101.com/r/nsyxfj/6

gt0wga4j

gt0wga4j1#

这个 ((?:[\w'\\ -]+)+) 模式部分导致灾难性的回溯。
你需要使用

Region\\ name\s*=([\w'\\\s-]+)(?:[\s,]+\w+=|,|$)

查看regex演示。
在scala中,定义如下模式:

val pattern =raw"$target\s*=([\w'\\\s-]+)(?:[\s,]+\w+=|,|$$)".r.unanchored
raogr8fs

raogr8fs2#

->提取整数值有效吗?还是我必须修改一些东西

相关问题