假设我想捕捉此类短语:
这非常好。非常棒。
我感激,非常感激。
那是恶心。绝对令人厌恶。
我希望正则表达式与粗体部分相匹配。请注意,在第一个单词后面可能会出现逗号或点。
答案 0 :(得分:0)
怎么样
^.*?(\b\w+\b)(.*?\1).*?$
它匹配一个单词(捕获它),匹配任何直到同一个单词的任何内容(\1
是对第一个捕获的反向引用)。
结果是两个捕获组 - 第一个保存实际的单词,第二个 - 其余的包括第二个单词。
问候。
编辑:
如果你想确保中间只有一个单词,并且(我认为)只对这两个单词感兴趣,这是一个替代解决方案:
^.*?(\b\w+\b)[.,]\s*(\w+)\s*\1.*?$
它以相同的方式捕获第一个单词,匹配,
或.
后跟 a 单词,后跟第一个单词。它只捕获了这两个词。
答案 1 :(得分:0)
首先,你不需要描述所有的字符串,所有你需要知道的是,如果字符串的一部分有"夹在"字:
str_list = ['This is great. Really great.', 'I am grateful, very grateful.', 'That is disgusting. Absolutely very disgusting.', 'abcdef xxxxx abcdefg', 'abcdef xxxxx abcdef']
result = [x for x in str_list if re.search(r'\b(\w+)\W+\w+\W+\1\b', x)]
确保"结束词"是一个完整的单词,而不是一个更大的单词的一部分,你需要在反向引用后的最后放置一个单词边界。