2011-03-04 19 views
5

Şuna benzeyen bir dizim var: "XaXbXcX". Her iki tarafta X ile çevrili küçük harflerle eşleşmeye çalışıyorum. Python içinde bu çalıştım ama aradığım şeyi alamıyorum: Ben piton bilmiyorumRegex: örtüşen kalıpların eşleşmesi (belki Python'a özel)

pattern = r'(?<=X)([a-z])X' 
+0

yardımcı olur. – dugres

+0

@dugres: Gerçekten, dize XaXbXcXddXeeeX gibi görünüyorsa, desen dd ve eee (ve başlangıçta ve sonda bazı boş dize) döndürülerek başarısız olur. –

cevap

7

Bir örnek olarak geriye dönük belirtilme kullanabilirsiniz Ben de gskinner'da test ettim ([^(?:X)+])+. re.split ('X', str):

Umut bu, sen kullanımı var ki özel durumda size

+0

I * inanıyorum (ama aksi takdirde ikna olabilir) bu bakış açısı bir Python 2.7 özelliği - bu çözüm eleştirmek değil; RegExes ile gidecekseniz, tek yol bu. – Malvolio

+1

Bu yanlış, Python 2.0'dan beri lookbehind onaylamaları kullanıma sunuldu. http://docs.python.org/release/2.0/lib/re-syntax.html – rmmh

0

ancak bu regex işleri:

import re 
str = "XaXbXcX" 
pattern = r'X([a-z])X' 
matches = re.findall(pattern, str) # gives me ['a', 'c']. What about b? 
+0

aşağıdaki şablon da çalışır .. '([^ X]) +' bunu bir deneyin ve yardım ederse bana bildirin. . Tam regex: '/ ([^ (?: X) +]) +/gi' – Saravanan

+0

Desenleriniz," bir X tarafından çevrelenmiş tüm küçük harfli karakterler "den farklı olan" büyük harf X olmayan "tüm karakterlerle eşleşir. iki taraf da". Örneğin. dize geçtiyse, bu XaXbbXcXdXeXfXggX gibi görünüyorsa, her ikisi de * X üzerinde olmasa bile, b ve g karakterleriyle de eşleşeceği için başarısız olur. –

+0

X dışındaki tüm karakterleri seçerken, tüm eşleşmeleri kullanabileceğinizi düşündüm. her neyse b, g hepsi X ile çevrili. Yorumunuz için teşekkürler – Saravanan