2016-02-18 24 views
5

Hattın sonunda durmak için bir regex ile uğraşıyorum.Regex: Satır sonu uyuşmuyor

Girdi şuna benzer:

How text spacing looks in Notepad++

Bazı hatlar iki nokta üst üste sonra (herhangi bir karakter içerebilir) değerlere sahip, bazı yoktur. Kolonun iki tarafında boşluk olabilir, olmayabilir.

hatlar 2 için

ve 4 Aşağıdaki çalışma (yani sırasıyla maç 12 ve 16):

Pink\s*:\s*(.*)\n 
Red\s*:\s*(.*)\n 

Ama (eşleştirmek için bir değer yoktur) hat 3, yukarıda sözdizimi kullanılarak bir normal ifade 16 döndürür Yani, satırın sonunu okur.

Herkes yanlış yaptığımı önerebilir mi? VBA kullanıyorum.

+0

Örnekte 16'dan önce fazladan bir sütun saptandı, bu yüzden aslında: 16 döndürüldü, ancak bu soruyla alakalı değil. – QAer

+0

'\ s' yerine' [\ t] 'ile değiştirmeniz gerekir. Ya da [^ \ S \ r \ n] 'ile. –

cevap

3

Sahip olduğunuz sorun, \s kestirme karakter sınıfının hem dikey hem de yatay boşluklarla eşleşmesidir. Yani, hem boşluklara hem de yeni satır dizilerine uyuyor. Bu nedenle, yalnızca yatay boşluklarla eşleşmesi için kısıtlamanız gerekir.

'u [ \t] veya [^\S\r\n\v] ile değiştirmeniz gerekir.

+2

Harika, bu açıklama ve çözüm için teşekkürler. – QAer