首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >仅使用regex通过shell终端提取(从文本中)不重复的单词。

仅使用regex通过shell终端提取(从文本中)不重复的单词。
EN

Stack Overflow用户
提问于 2019-10-24 23:25:41
回答 1查看 112关注 0票数 1

我只想从下面的课文中提取不重复的单词。我只想使用regex,我看到了一些类似的问题,比如使用regex只从不包含重复字母的列表中提取这些单词。 (不要重复字母)和正则表达式:只包含非重复单词的匹配字符串。我希望结果是不按文本中出现的自然顺序重复出现的单词清单。

我的文本以通用格式:

教学心理学是教育心理学的一部分,是指学校教育。正如后面将看到的那样,两者都有着相同的目标:研究、解释和理解人们由于参与活动而产生的行为变化过程,教育赋予一个适合于教学心理学的实体,是行为变化研究基础上存在的教育活动的性质和特征。

我的文本用这个问题的答案逐字逐字逐句地列出(如果像这样使用更容易)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-25 07:20:37

如果您需要纯正则表达式解决方案,则只能使用.NET或Python实现,因为您需要regex库通常不具备的两项功能: 1)从右到左的输入字符串解析和2)无限宽查找。

这里有一个Python解决方案:

代码语言:javascript
运行
复制
import regex
text="Teaching psychology is the part of educational psychology that refers to school education. As will be seen later, both have the same objective: to study, explain and understand the processes of behavioral change that are produce in people as a consequence of their participation in activities educational What gives an entity proper to teaching psychology is the nature and the characteristics of the educational activities that exist at the base of the of behavioral change studied."
rx = r'(?rus)(?<!\b\1\b.*?)\b(\w+)\b'
print (list(reversed(regex.findall(rx, text))))

看一个在线演示

详细信息

  • (?rus) - r支持从右到左的输入字符串解析(正则表达式中的所有模式按照惯例从左到右匹配,因此匹配文本不会反转),u 2中的u用于使\w Unicode知道,它是Python3中的默认选项,s是使.匹配行中断的DOTALL修饰符。
  • (?<!\b\1\b.*?) -如果在当前位置的左侧没有匹配,则有任何0+字符,然后与在第1组中捕获的文本相同(请参阅表达式后面的内容)为整个单词
  • \b(\w+)\b -一个完整的单词,1+单词字符在单词边界内。

reversed用于按原始顺序打印单词,因为从右到左的正则表达式从头到尾都与它们匹配。

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

https://stackoverflow.com/questions/58550369

复制
相关文章

相似问题

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