regex 需要最佳正则表达式代码来消除重复句子

relj7zay  于 2023-05-13  发布在  其他
关注(0)|答案(1)|浏览(119)

我想出了一个代码,它与前面三个句子的重复相匹配。(它可以通过重复模式扩展到任何最大重复句子数量。

(.*?\.)( .*?\.)?( .*?\.)? \1\2?\3?

示例用法:

string = 'Red apple. Green pepper. Yellow onion. Red apple. Green pepper. Yellow onion.'
output = re.sub(r'(.*?\.)( .*?\.)?( .*?\.)? \1\2?\3?', r'\1\2\3', string , flags=re.MULTILINE)
print(output)  # 'Red apple. Green pepper. Yellow onion.'

例如Demo'Red apple. Green pepper. Yellow onion. Red apple. Green pepper. Yellow onion.'
它也可以匹配一两个句子的重复。
例如Demo'Red apple. Red apple.'->输出'Red apple.'
例如Demo'Red apple. Green pepper. Red apple. Green pepper.'->输出'Red apple. Green pepper.'
你能建议一个优雅/通用的形式来使它与任何一个微小的重复句子匹配吗?
谢谢大家。

qyswt5oh

qyswt5oh1#

将字符串拆分成句子并将其打印为一个集合:

import re
string = 'Red apple. Green pepper. Yellow onion. Red apple. Green pepper. Yellow onion.'
print( set( re.split('\. *', string)))

输出:

{'', 'Green pepper', 'Red apple', 'Yellow onion'}

是的,结果失去了周期。因为我们知道每个句子最初都是以句号结尾的,所以添加一个句号是很容易的。
或者,根本不使用正则表达式:

string = 'Red apple. Green pepper. Yellow onion. Red apple. Green pepper. Yellow onion.'
print( set( string.replace('. ','.').split('.')[:-1]))

输出:

{'Yellow onion', 'Green pepper', 'Red apple'}

相关问题