我只想从下面的课文中提取不重复的单词。我只想使用regex,我看到了一些类似的问题,比如使用regex只从不包含重复字母的列表中提取这些单词。 (不要重复字母)和正则表达式:只包含非重复单词的匹配字符串。我希望结果是不按文本中出现的自然顺序重复出现的单词清单。
我的文本以通用格式:
教学心理学是教育心理学的一部分,是指学校教育。正如后面将看到的那样,两者都有着相同的目标:研究、解释和理解人们由于参与活动而产生的行为变化过程,教育赋予一个适合于教学心理学的实体,是行为变化研究基础上存在的教育活动的性质和特征。
我的文本用这个问题的答案逐字逐字逐句地列出(如果像这样使用更容易)
发布于 2019-10-25 07:20:37
如果您需要纯正则表达式解决方案,则只能使用.NET或Python实现,因为您需要regex库通常不具备的两项功能: 1)从右到左的输入字符串解析和2)无限宽查找。
这里有一个Python解决方案:
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
用于按原始顺序打印单词,因为从右到左的正则表达式从头到尾都与它们匹配。
https://stackoverflow.com/questions/58550369
复制相似问题