regexp模式匹配字符串,字符夹在两个相同的字符串之间

时间:2016-03-02 13:45:26

标签: python regex

假设我想捕捉此类短语:

  

这非常好。非常棒。

     

感激,非常感激

     

那是恶心。绝对令人厌恶。

我希望正则表达式与粗体部分相匹配。请注意,在第一个单词后面可能会出现逗号或点。

2 个答案:

答案 0 :(得分:0)

怎么样

^.*?(\b\w+\b)(.*?\1).*?$

它匹配一个单词(捕获它),匹配任何直到同一个单词的任何内容(\1是对第一个捕获的反向引用)。

结果是两个捕获组 - 第一个保存实际的单词,第二个 - 其余的包括第二个单词。

regex101 example

问候。

编辑:

如果你想确保中间只有一个单词,并且(我认为)只对这两个单词感兴趣,这是一个替代解决方案:

^.*?(\b\w+\b)[.,]\s*(\w+)\s*\1.*?$

它以相同的方式捕获第一个单词,匹配,.后跟 a 单词,后跟第一个单词。它只捕获了这两个词。

Example

答案 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)]

确保"结束词"是一个完整的单词,而不是一个更大的单词的一部分,你需要在反向引用后的最后放置一个单词边界。