首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >以特定正则表达式开头的只读行

以特定正则表达式开头的只读行
EN

Stack Overflow用户
提问于 2017-09-27 08:54:22
回答 3查看 258关注 0票数 0

我只想读以特定正则表达式开头的行。

代码语言:javascript
运行
复制
 val rawData = spark.read.textFile(file.path).filter(f => f.nonEmpty && f.length > 1 && f.startsWith("(")) 

直到现在我都是这样做的。

现在我发现我的条目以:(W);27536-或(W) 28325- (分隔符后面的5位数)开头。

我只想读取以(W);1234- (分隔器后面的4位数)开头的行。

捕获此值的正则表达式如下所示:\(\D\)(;|\s)\d{4}表示布尔返回,\(\D\)(;|\s)\d{4}-.*表示字符串匹配返回

我现在的问题是,我不知道如何在我的read.textFile命令中包含正则表达式。

f.startswith只适用于字符串

f.matches也只适用于字符串。

我也尝试使用http://www.scala-lang.org/api/2.12.3/scala/util/matching/Regex.html,但是这会返回一个字符串,而不是一个布尔值,我不能在过滤器函数中使用这个字符串。

任何帮助都将不胜感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-09-27 09:21:56

其他的答案是-考虑过了。只需使用matches

代码语言:javascript
运行
复制
val lineRegex = """\(\D\)(;|\s)\d{4}-.*"""
val ns = List ("(W);1234-something",
               "(W);12345-something",
               "(W);2345-something",
               "(W);23456-something",
               "(W);3456-something",
               "",
               "1" )
ns.filter(f=> f.matches(lineRegex))

结果:

代码语言:javascript
运行
复制
List("(W);1234-something", "(W);2345-something", "(W);3456-something")
票数 2
EN

Stack Overflow用户

发布于 2017-09-27 09:12:00

我找到了我问题的答案。

命令需要如下所示。

代码语言:javascript
运行
复制
 val lineregex = """\(\D\)(;|\s)\d{4}-.*""".r

 val rawData = spark.read.textFile(file.path)
  .filter(f => f.nonEmpty && f.length > 1 && lineregex.unapplySeq(f).isDefined )
票数 1
EN

Stack Overflow用户

发布于 2017-09-27 09:14:19

您可以使用findFirstMatchIn方法尝试查找Regex的匹配,该方法返回一个Option[Match]

代码语言:javascript
运行
复制
spark.read.textFile(file.path).filter { line =>
  line.nonEmpty &&
  line.length > 1 &&
  "regex".r.findFirstMatchIn(line).isDefined
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46443517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档