Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.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
Java 用于搜索带有空格和反斜杠的字符串的正则表达式程序性能问题_Java_Regex_Scala_Apache Spark - Fatal编程技术网

Java 用于搜索带有空格和反斜杠的字符串的正则表达式程序性能问题

Java 用于搜索带有空格和反斜杠的字符串的正则表达式程序性能问题,java,regex,scala,apache-spark,Java,Regex,Scala,Apache Spark,以下是我的几行文字: 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 23

以下是我的几行文字:

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 }
但是,当出现像
shopABCDABCDABCDABCDASSSS
shopABCDABCDASSSSSSSSSSSS
这样的长字符串时,使用
.r.unanchored
提取结果会花费更多的时间或挂起

可以用更好的代码替换它吗? 这已经解决了,谢谢你的回答

regex101.com/r/nSYxfj/6-------->提取整数值是否有效。或者我必须修改
((?:[\w'\\-]+)+)
模式部分的原因

你需要使用

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

在Scala中,定义如下模式:

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

你有什么问题?很明显,有灾难性的回溯需要修复。south,attribute\MO\Name=A,MO\Name=B SA\Total=98 1590424200000000 south,attribute\MO\Name=C,MO\Name=D,SA\Total=98 1590424200000000这里用户输入的是attribute\MO\Name和MO\Name,我们正在使用下面的regx val patternRegx=raw“(?请重新接受下面的答案,它完全解决了原始问题。其他问题将在您的其他问题中讨论。评论不用于扩展讨论;此对话已结束。