在子字符串正则表达式中查找字符串

时间:2018-06-27 14:15:55

标签: 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-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_RES]的行数,例如,在我的数据框中,包含字符串[CS_RES]的行数是3

如何使用Regex做到这一点?

2 个答案:

答案 0 :(得分:1)

这可能是您要查找包含字符串[CS_RES]的行号的原因 让我们将您的dataframe数据放入文本文件datafile.txt的文本文件中 scala的当前目录。然后,

val lines = io.Source.fromFile("datafile.txt").getLines.toArray

会将所有行读入lines个字符串数组Array[String]中。 现在,以下命令将处理包含所需内容的行 字符串并返回包含[CS_RES]的行号列表。我检查了 此命令将您在sample data中提供的question放置在List[Int]中,它给了我1,3 and 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)

Console.ReadLine()

答案 1 :(得分:0)

尝试一下:

val str = "your input string"

val reg = ".*\\[CS_RES\\].*".r
reg.findAllIn(str).length 

请注意,转义字符\也需要转义。