首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >根据正则表达式提取要在RDD.filter中使用的子串

根据正则表达式提取要在RDD.filter中使用的子串
EN

Stack Overflow用户
提问于 2016-08-23 23:56:22
回答 2查看 798关注 0票数 1

我正在尝试过滤掉一个文本文件的行,该文本文件的第二个列值以列表中的单词开头。

我有这样的列表:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
val mylist = ["Inter", "Intra"]

如果我有像这样的行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Cricket Inter-house

Inter在列表中,因此应该通过RDD.filter操作过滤掉该行。我使用以下正则表达式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
`[A-Za-z0-9]+`

我尝试使用"""[A-Za-z0-9]+""".r来提取子字符串,但结果是在一个非空的迭代器中。

我的问题是如何在过滤操作中访问上面的结果?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-24 03:18:12

因为"""[A-Za-z0-9]+"""可以匹配任何单词,所以您需要构造像".* Inter.*".r这样的正则表达式。这里有一些工作示例,希望它能有所帮助:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
val mylist = List("Inter", "Intra")    
val textRdd = sc.parallelize(List("Cricket Inter-house", "Cricket Int-house", 
                                  "AAA BBB", "Cricket Intra-house"))

// map over my list to dynamically construct regular expressions and check if it is within 
// the text and use reduce to make sure none of the pattern exists in the text, you have to 
// call collect() to see the result or take(5) if you just want to see the first five results.

(textRdd.filter(text => mylist.map(word => !(".* " + word + ".*").r
                       .pattern.matcher(text).matches).reduce(_&&_)).collect())

// res1: Array[String] = Array(Cricket Int-house, AAA BBB)
票数 0
EN

Stack Overflow用户

发布于 2016-08-24 00:50:12

filter将删除传递给filter方法的函数返回true的所有内容。因此,正则表达式并不是您想要的。相反,让我们开发一个函数,该函数接受一行并将其与候选字符串进行比较,如果该行中的第二列以候选字符串开头,则返回true

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
val filterFunction: (String, String) => Boolean =
  (row, candidate) => row.split(" ").tail.head.startsWith(candidate)

我们可以说服自己,使用工作表很容易做到这一点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Test data
val mylist = List("Inter", "Intra")
val file = List("Cricket Inter-house", "Boom Shakalaka")

filterFunction("Cricket Inter-house", "Inter")  // true
filterFunction("Cricket Inter-house", "Intra")  // false
filterFunction("Boom Shakalaka", "Inter")  // false
filterFunction("Boom Shakalaka", "Intra")  // false

现在剩下的就是在过滤器中使用这个函数了。基本上,对于每一行,我们希望针对候选列表中的每一行测试筛选器。这意味着获取候选列表并“向左折叠”,以根据函数检查其中的每一项。如果任何候选人报告为真,那么我们知道应该从最终结果中过滤掉该行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
val result = file.filter((row: String) => {
  !mylist.foldLeft(false)((x: Boolean, candidate: String) => {
    x || filterFunction(row, candidate)
  })
})

// result: List[String] = List(Boom Shakalaka)

上面的内容在解包时可能会有点密集。我们将一个函数传递给filter方法,该函数接受一行并生成一个布尔值。当且仅当行与我们的条件不匹配时,我们希望该值为true。我们已经在filterFunction中嵌入了我们的标准:我们只需要对mylist中的每个项目组合运行它。

为此,我们使用foldLeft,它接受一个起始值(在本例中为false)并迭代地遍历列表,更新该起始值并返回最终结果。

为了“更新”该值,我们编写了一个函数,该函数将初始值与对mylist中的行和当前项运行筛选函数的结果进行逻辑或运算。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39112409

复制
相关文章
根据前后的子串求中间串的函数
using System.Text.RegularExpressions;      /// <summary>   /// 给出一个字符串,前面的子串和后面的子串,返回中间的子串(删除空格)   /// </summary>   /// <param name="s"></param>   /// <param name="s1">如果前面要顶头,s1=""</param>   /// <param name="s2">如果后面要是结尾,s2="$"</param>   
用户1075292
2018/01/23
8020
PHP经典:提取子字符串
substr:整个字符串 从哪里开始(第一个是下标0) 最后是哪里(比如写8那8-1=7就对了)
贵哥的编程之路
2021/10/09
7860
删除字符串中的子串
输入2个字符串S1和S2,要求删除字符串S1中出现的所有子串S2,即结果字符串中不能包含S2。
叶茂林
2023/07/28
2910
删除字符串中的子串
[Golang] golang中使用正则表达式获取子字符串
我从img[/static/upload/xxxx/xxx.jpg中获取xxxx/xxx.jpg
唯一Chat
2022/05/13
6730
字符串中查找子串_cstring查找子字符串
假设要从主串 s = “goodgoogle” 中找到 t = “google” 子串。根据我们的思考逻辑,则有:
全栈程序员站长
2022/09/24
3K0
字符串中查找子串_cstring查找子字符串
华为OD机试 最多提取子串数目
本期题目:最多提取子串数目 🧐🔍 题目 给定由 [a-z] 26 个英文小写字母组成的字符串 A 和 B,其中 A 中可能存在重复字母,B 中不会存在重复字母 现从字符串 A 中按规则挑选一些字母,可以组成字符串 B。 挑选规则如下: 1) 同一个位置的字母只能被挑选一次 2) 被挑选字母的相对先后顺序不能改变 求最多可以同时从 A 中挑选多少组能组成 B 的字符串 🤔💭 输入 输入为 2 行,第 1 行输入字符串 A,第 2 行输入字符串 B,行首行尾无多余空格 其中 A、B 均由[a-z] 26 个英文
梦想橡皮擦
2023/03/28
4260
正则提取字符串中的数字_正则表达式忽略空格python
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/10
3.3K0
正则提取字符串中的数字_正则表达式忽略空格python
javascript使用正则表达式替换或者捕获子字符串
上面的代码会将字符串 '{"name":"新建文件夹 (2).zip","ext":".zip","size":1675876,"path":"/static/upload/2022December/ba145698fcc99fd414f0f4ec6ea418e5.zip"}' 输出到控制台。
唯一Chat
2022/12/27
9940
js提取正则中的字符串
代码如下: var results = data.match(/(start=').*?(')/); if (results != null) { console.log(data[0]);
磊哥
2018/05/08
5.5K0
jmeter的正则表达式提取器_jmeter正则提取器的使用
首先,先在正则表示式提取器里面添加我们找到的左右边界 然后写好正则表达式 最后确定边界是唯一的
全栈程序员站长
2022/10/02
8340
jmeter的正则表达式提取器_jmeter正则提取器的使用
jmeter正则表达式提取器提取特定字符串后的全部内容
jmeter进行JDBC请求时,请求后的响应结果在传递给下一个请求使用时,需要用到关联,也在jmeter中,关联通过正则表达式提取器实现。
流柯
2018/08/31
3.5K0
jmeter正则表达式提取器提取特定字符串后的全部内容
jmeter的正则表达式提取器_正则表达式提取
在一个线程组中,B请求需要使用A请求返回的数据,也就是常说的关联,将上一个请求的响应结果作为下一个请求的参数,则需要对A请求的响应报文使用后置处理器,其中最方便最常用的就是正则表达式提取器了。
全栈程序员站长
2022/10/01
4.1K0
jmeter的正则表达式提取器_正则表达式提取
用正则表达式查找提取替换字符串
C++11标准支持正则表达式后,使用正则表达式查找、提取、替换字符串就无需使用第三方开源库。
gaigai
2019/10/21
4.6K0
用正则表达式查找提取替换字符串
【正则表达式】从字符串中提取数字
使用正则表达式,用法如下: ## 总结 ## ^ 匹配字符串的开始。 ## $ 匹配字符串的结尾。 ## \b 匹配一个单词的边界。 ## \d 匹配任意数字。 ## \D 匹配任意非数字字符。 #
蛮三刀酱
2019/09/10
6.3K0
正则表达式中的子组模式
作者:西瓜玩偶(racnil070512 at hotmail dot com) 一、基础知识 在PCRE正则表达式中,我们可以利用圆括号定义一个子组,我们可以使用preg_match函数(其他函数的信息请参考PHP官方API文档)的第三个参数捕获圆括号中匹配的内容: preg_match('#color\h*:\h*([A-Za-z]*)#', 'color: red', $matches); print_r($matches); 运行的结果为: Array ( [0] => colo
wangxl
2018/03/08
1.7K0
回文子串的个数_统计回文子串的个数
(1)从左往右,钉住最后一个字符。 “abaa”串:先考查中心子串“ba”不是回文串,就可以判定“abaa”不是回文子串; “baa”串:先考查中心子串“baa”不是回文,它是最外子串,不必向外扩散; “aa”串:考查中心子串中“aa”是回文,它是最外子串,不必向外扩散。 (2)从右边倒数第二个字符往左,钉住第一个字符。 “aba”串:考查中心子串“aba”,是回文,它是最外子串,不必向外扩展; “ab”串:考查子串“ab”,不是回文,它是最外子串,不必向外扩展; 这样下来,加上单个子串“a”,“b”,“a”,“a”4个,“abaa”中共包含6个回文子串。 1.2、输入描述 输入数据中有多个测试案例。每个案例是一个非空且长度不超过5000的字符串。 处理到文件结尾。 1.3、输出描述 在每行上打印该字符串中回文子串的个数。 1.4、输入样例 aba aa 1.5、输出样例 4 3 2、C++实现 #include <iostream> using namespace std; int main(int argc, char* argv[]) { char s[5000]; int p, i, Half, Left, Right, Count; while( cin>>s ) { i = strlen(s); Count = 0; //从左到右钉住最后一个 for(p=0; p<=i-1; p++) { Half = ((i-1)-p) / 2; //如果子串是奇数个 if( ((i-1)-p)%2 == 0 ) { Left = p + Half - 1; Right = p + Half + 1; } else { //如果子串是偶数个 Left = p + Half; Right = p + Half + 1; } while(Left >= p) { if( s[Left] == s[Right]) { Count++; //发现了一个回文串 Left--; Right++; } else { //如果不相等,立即终止,由中心向外扩散不可能会有回文串 break; } } } //从右到左钉住第一个 for(p=i-2; p>=1; p--) { Half = p / 2; //如果子串是奇数个 if(p%2 == 0) { Left = Half - 1; Right = Half + 1; } else //如果子串是偶数个 { Left = Half; Right = Half + 1; } while( Left >= 0 ) { if( s[Left] == s[Right] ) { Count++; //发现了一个回文串 Left--; Right++; } else { //如果不相等,立即终止,由中心向外扩散不可能会有回文串 break; } } } printf("%d\n",Count + i); } return 0; }
全栈程序员站长
2022/11/03
1.2K0
回文子串的个数_统计回文子串的个数
Excel公式技巧22: 从字符串中提取指定长度的连续数字子串
本文给出了一种从可能包含若干个不同长度的数字的字符串中提取指定长度的数字的解决方案。在实际的工作表中,存在着许多此类需求,例如从字符串中获取6位数字账号。
fanjy
2020/03/25
3.1K0
Java练习—-》求字符串中的最长回文子串
第一次把自己的解题思维写出来,可能写的不太好,请给位原谅,哈哈哈哈额,如果有错的,请各位大佬帮我指出来哈,谢谢!!(^U^)ノ~YO
全栈程序员站长
2022/11/03
9060
Java练习—-》求字符串中的最长回文子串
正则表达式 – 去掉乱码字符/提取字符串中的中文字符/提取字符串中的大小写字母 – Python代码
数据清洗的时候一大烦恼就是数据中总有各种乱码字符,比如!@#¥%……&——+*(){}:“》《?|【】‘;/。,、-=
全栈程序员站长
2022/08/25
3.3K0
python提取字符串中数字
题目:【这是一个复杂问题的简化】如下是一个字符串列表,提取字符串中第二个数字,并判断是否大于1000,如果是,从列表中删除这一行。
用户7886150
2021/01/10
2.7K0

相似问题

使用正则表达式提取子串

30

如何使用正则表达式提取子串

312

使用正则表达式提取子字符串

10

使用正则表达式提取子字符串

11

使用正则表达式提取子字符串

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文