2013-10-03 64 views
4

我想斷言一個字符串包含兩個相同的子字符串。如何在正則表達式中定義循環?

我想這正則表達式:[A-ZA-Z]{2}

我想檢測一下:

AZAZ 
CUCU 
PIPI 

但這個表達式只檢查,如果有4個大寫的字母排成一列,所以

ABCD --> it's good and it shouldn't be 

我真的很抱歉,如果這不清楚,我不知道如何編寫正則表達式來聲明重複。

+5

那麼你使用什麼語言/風味?基本上你需要使用反向引用,這在所有的風格中都不被支持。在PCRE/PHP中,你可以使用'([A-Z] {2})\ 1'。 [看它工作](http://regex101.com/r/xR2iD0) – HamZa

+0

@HamZa我還沒有看到任何不支持反向引用的味道。你知道任何?不能在正則表達式中使用反向引用真的很奇怪。 –

+0

@RohitJain我現在無法想出一個,但是花了這麼多時間在SO之後,我遇到了OP使用某個系統/程序的問題,在這個系統/程序中不支持「正常」的正則表達式功能。如果我的記憶不欺騙我,那麼在某種語言中不支持反向引用(在匹配中),但我不記得哪一個...... – HamZa

回答

2

使用Python,你可以做到以下幾點:

p="((?P<two_chars>[A-Z]{2})(?P=two_chars))" 
s="AZAZABCDCUCUPIPI" 
re.findall(p, s) 
[('AZAZ', 'AZ'), ('CUCU', 'CU'), ('PIPI', 'PI')] 

,然後從列表中提取所需的元素。或者你可以做得更快:

[k for k,v in re.findall(p,s)] 
['AZAZ', 'CUCU', 'PIPI'] 

希望它有幫助。