2016-04-05 26 views
1
arasındaki dize, çizgilerin vakalar Python aşağıdaki ayrıştırma senaryo var orada

zaman eşleşmemelerine Yapılması gereken, verilen satırın regex kullanarak hangi duruma ait olduğunu sınıflandırmaktır.regex iki dizeleri

1) ve 2) arasında başarılı bir şekilde sınıflandırma yapabilirim, ancak 3 ile başa çıkmakta güçlük çekiyorum.

yakalamak için 1) Kullandığım:

re.match('\s*{{[^{]*?/}}\s*',line) 

2 yakalamak için) Kullandığım: o zaman

re.match('{{.*?}}',line) 

ve durumda 2 beri bağlamı tutmak için bir bayrak kaldırmak) çoklu hatları üzerinden olabilir . Nasıl davayı yakalayabilirim 3)? Ben zor bir zaman regex bu phrasing yaşıyorum Ancak

- start with '{{' 
- end with '/}}' 
- with no '{{' in between 

: Şu anda maç için çalışıyorum

koşul için test etmektir.

+2

'^ {{((?! {{).) * /}} $' - Bir kelime içermeyen satırla eşleşecek şekilde [Normal ifadeyi görüyor musunuz?] (Http://stackoverflow.com/questions/ 406230/düzenli ifade-eşleme-satır-bu-does-a-kelime-kelime) –

+0

Bu js iyi çalışır ama python içinde onunla sorun yaşıyor. Js'de iyi olan 1 ve 2 durumlarını yakalar, ancak python'da eşleşme olmaz. –

+0

http: // pythex kullanımı.org/(harika site btw :)) Normal ifadenin 1 ve 3 ile eşleştiğini, ancak 2 değil - çünkü '{{' içerdiğini. Çalışmayan kodunuzu gönderebilir misiniz? –

cevap

1

koşulları:

- start with '{{' 
- end with '/}}' 
- with no '{{' in between 

bir tempered greedy token için mükemmel bir çözümdür.

^{{(?:(?!{{|/}}).)*/}}$ 
    ^^^^^^^^^^^^^^^^ 

Bkz. regex demo. (?:(?!{{|/}}).)*

{{ ve /}} olmayan herhangi bir metinle eşleşen (böylece ilk /}} kadar eşleşir). Çapalar (^ ve $), yalnızca {{ ile başlayan ve /}} ile biten ve içinde {{ bulunmayan bir dizginin eşleşmesine izin verir. re.match ile ^ ankrajını yapamayacağınızı unutmayın.

^{{(?:(?!{{|/}}).)*{[^{}]*}(?:(?!{{|/}}).)*/}}$ 
    | ---- 1 -----|| - 2 -||--------1-----| 

another regex demo

Bölüm 1 temperli açgözlü belirteci yukarıda açıklanan bakınız:

Şimdi sadece dizeleri 3'üncü türüne uyacak şekilde, sen {....} senin desen olması gerektiğini belirtmek gerekir ve {[^{}]*}, girdinin içinde zorunlu kılan tek bir {...} alt dizeyle eşleşir.

+0

Yardımcı olur mu? Senin için çalışıyor mu? –