在子字符串Regex中查找字符串
我在DataFrame scala中有一列,其中包含许多如下字符串:在子字符串Regex中查找字符串,regex,scala,Regex,Scala,我在DataFrame scala中有一列,其中包含许多如下字符串: [Z12M1E][AGORA][Essai][CS_RES]ECO-56417-Escalade-ECO-56344-#incidentMajProduit# Y2103 Y2103B0 S82NE INCIDENTE 20180305 030403 20180305 030512 [Z12M1E][AGORA][Essai]ECO-56417-Escalade-E
[Z12M1E][AGORA][Essai][CS_RES]ECO-56417-Escalade-ECO-56344-#incidentMajProduit# Y2103 Y2103B0 S82NE INCIDENTE 20180305 030403 20180305 030512
[Z12M1E][AGORA][Essai]ECO-56417-Escalade-ECO-56344-#incidentMajProduit# Y2103 Y2103B0 S82NE INCIDENTE [CS_RES] 20180305 030403 20180305 030512
[Z12M1E][AGORA][20180305]ECO-56417--ECO-56344-#incidentMajProduit# Y2103 Y2103B0 S82NE INCIDENTE Escalade 20180305 030512
[Z12M1E][AGORA][20180305]ECO-56417--ECO-56344-#incidentMajProduit# Y2103 Y2103B0 S82NE INCIDENTE [CS_RES] Escalade 20180305 030512
我想计算包含字符串[CS\u RES]
的行数,例如在我的数据帧中,包含字符串[CS\u RES]
的行数是3
如何使用Regex执行此操作?请尝试以下操作:
val str = "your input string"
val reg = ".*\\[CS_RES\\].*".r
reg.findAllIn(str).length
请注意,转义字符
\
也需要转义。可能就是您要查找的包含字符串的行号,[CS\u RES]
让我们将您的dataframe
数据放入文本文件,将datafile.txt
放入
scala的当前目录。那么
val lines = io.Source.fromFile("datafile.txt").getLines.toArray
将所有行读入字符串数组,array[String]
。
现在,下面的命令将处理包含所需
字符串并返回包含[CS\u RES]
的行号列表。我查过了
此命令放置您在问题中提供的样本数据
,并为我提供一个列表[Int]
,行号为1,3和8
scala> lines.map(x=>if(x.matches(""".*\[CS_RES\].*"""))
(lines.indexOf(x)+1)else 0).toList.filter(_!=0)
res50: List[Int] = List(1, 3, 8)
Scala for Apache SparkWhat版本的Spark?数据是否仍在数据帧中,或者您是否已将字符串提取到列表中?我认为此正则表达式是错误的,因为当我将其应用于数据帧时,它返回一个小数字,另一方面,当我计算包含字符串的行数时[CS_RES]是一个大数字。如何更正它以计算字符串[CS_RES]中包含的行数,如我上面的示例所示,3行包含此值String@vero-正则表达式代码工作正常。您很可能会多次看到一些包含[CS\u RES]
的行,并且这些行都被计为一行。您应该分析行的真正起点和终点,以及输入字符串/文件中实际包含的行尾分隔符。是的,我应该分析行的起点和终点,谢谢