英文:
Need optimal regex code to eliminate repeat sentences
问题
我想出了这段代码,可以匹配前三句的重复。 (通过重复模式,可以扩展到任意最大重复句数。)
Example usage:
```py
string = '红苹果。 绿辣椒。 黄洋葱。 红苹果。 绿辣椒。 黄洋葱。'
output = re.sub(r'(.*?\.)( .*?\.)?( .*?\.)? ??', r'', string , flags=re.MULTILINE)
print(output) # '红苹果。 绿辣椒。 黄洋葱。'
示例: Demo: '红苹果。 绿辣椒。 黄洋葱。 红苹果。 绿辣椒。 黄洋葱。'
这也适用于匹配一到两句的重复。
示例: Demo: '红苹果。 红苹果。' -> 输出 '红苹果。'
示例: Demo: '红苹果。 绿辣椒。 红苹果。 绿辣椒。' -> 输出 '红苹果。 绿辣椒。'
你能提供一个优雅/通用的形式,使其能匹配任意数量的重复句子吗?
谢谢。
<details>
<summary>英文:</summary>
I've come up with this code that matches up to a repeat of the three prior sentences. (It can be extended to any maximum number of repeat sentences by repeating the pattern.)
```none
(.*?\.)( .*?\.)?( .*?\.)? ??
Example usage:
string = 'Red apple. Green pepper. Yellow onion. Red apple. Green pepper. Yellow onion.'
output = re.sub(r'(.*?\.)( .*?\.)?( .*?\.)? ??', r'', string , flags=re.MULTILINE)
print(output) # 'Red apple. Green pepper. Yellow onion.'
eg. Demo: 'Red apple. Green pepper. Yellow onion. Red apple. Green pepper. Yellow onion.'
It works to match the repeat of one or two sentences too.
eg. Demo: 'Red apple. Red apple.'
-> Outputs 'Red apple.'
eg. Demo: 'Red apple. Green pepper. Red apple. Green pepper.'
-> Outputs 'Red apple. Green pepper.'
Can you suggest an elegant/general form for making it match any nuber of repeat sentences?
Thank you.
答案1
得分: 1
将字符串分割成句子并打印为集合:
import re
string = '红苹果。绿辣椒。黄洋葱。红苹果。绿辣椒。黄洋葱。'
print(set(re.split('。 *', string)))
输出:
{'', '黄洋葱', '红苹果', '绿辣椒'}
是的,结果中没有句点。由于我们知道每个句子原本以句点结尾,所以很容易添加一个。
另外,也可以完全不使用正则表达式:
string = '红苹果。绿辣椒。黄洋葱。红苹果。绿辣椒。黄洋葱。'
print(set(string.replace('。 ', '。').split('。')[:-1]))
输出:
{'黄洋葱', '绿辣椒', '红苹果'}
英文:
Split the string into sentences and print it as a set:
import re
string = 'Red apple. Green pepper. Yellow onion. Red apple. Green pepper. Yellow onion.'
print( set( re.split('\. *', string)))
Output:
{'', 'Green pepper', 'Red apple', 'Yellow onion'}
Yes, the result loses the period. Since we know each sentence ended with a period originally, it's pretty easy to add one.
Alternatively, without using regular expressions at all:
string = 'Red apple. Green pepper. Yellow onion. Red apple. Green pepper. Yellow onion.'
print( set( string.replace('. ','.').split('.')[:-1]))
Output:
{'Yellow onion', 'Green pepper', 'Red apple'}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论