Visual Studio 2012, 2013, 2015 ve VS Kodu'nda normal ifade bul ve değiştir ile yakalama grubuna nasıl başvuruyorsunuz?


255

Bu konuda bir ton soru olduğunu fark ettim, ama hiçbiri özellikle hangi VS sürümüne atıfta bulunduğunu belirtti. Bu önemli bilgilerin eksik olması nedeniyle bulduğum cevapları hala başarılı bir şekilde kullanamadım. En yaygın olanı

  • {} İle çevreleyin, \ 1, \ 2, \ n ile ekran yakalama

Ancak, Visual Studio'da regex bulma ve değiştirme yapmanın eski yöntemi gibi görünüyor ve VS 2012'de çalışmıyor.


1
Yardımda bulmak çok zor değil: Ara / Değiştir iletişim kutusunda, F1; Erken Bulma ve Değiştirme Metin bir bağlantı vardır VS Normal İfadeleri Kullanmak ; burada 2. ipucu sizi Düzenli İfadelerdeki Değişiklikler anlamına gelir ; orada size temellerini verir ve altında daha ayrıntılı olduğunu söylüyor bir Numaralı Grup ikame ve bir Adlandırılan Grubu ikame .
PJTraill

2
@PJTraill, 2013 ve 2015 yılları arasında 2012 sürümleri için bir soruya cevap vermeyi kolaylaştırdıklarını bilmek güzel. Oylamalara rağmen, yardımda bulmak hala "çok zor değil". IMO: Yığın taşma makalesinde arama yapmak ve oy vermek, yardım aramadan bul, değiştir, yakalamayı kullanmaktan daha kolaysa, olması gerekenden çok daha zor.
SgtPooki

MSVS 2012/3 hakkında beni rahatsız eden bir şey, aramanın kapsamını değiştiren yanlışlıkla (muhtemelen başka bir yerde başka bir şey anlamına gelir) tuttuğum daha küçük (Ctrl-H) iki farklı Arama / Değiştir iletişim kutusudur. . Ancak belirtmek istediğim , daha büyük (Ctrl-Shift-H) iletişim kutusunun Bul ve Değiştir alanlarından sonra, aradığınız şey de dahil olmak üzere daha önemli olasılıkların bir listesini veren düğmelere sahip olmasıdır. Yardıma ihtiyacınız var! Sanırım birçok insan ya düğmeleri görmez ya da Ctrl-H diyaloguna iner ve onları göremez.
PJTraill

Yardım bulmak biraz rahatsız olduğunu kabul ediyorum; Düz metin aramaya öncelik verdiklerinden şüpheleniyorum. Benim demek kimse bilmez veya kabul eğer biri olması gerektiğini fazlasıdır olabilir makul kolayca bulmasını; Kanonik belgeleri bulabildiğimde kullanmayı tercih ettiğim için sık sık o rotayı takip ediyorum. Kulağa küçük düşürücü gelmek istememiştim; Hem “çok zor” hem de “çok zor değil” diye düşünüyorum; “çok da değil” ifadesini “zor” olarak nitelendirir ve örtük “ne için zor?” Cevabını eklerseniz karşıt olmazlar.
PJTraill

REGEXP etiketlemesinin '()' kullandığını biliyordum, belgeleri yeniden okudum ve işe yaramadı ... bu yüzden emin olmak için buraya geldim ... sonra biraz daha deney yaptım ve işe yaradı. Bu nedenle IMHO MSDN belgelerinin, eski VS6 "etiketi" isimlendirmesini öğrenmek zorunda kalanlarımız için () bir ifadeyi "etiketlemek" için kullanıldığı açıkça anlaşılmalıdır. Aynı isimlendirmeyi kullanmaları güzel olurdu. Numaralandırılmış gruplar ... sinapsları yeterince iyi IMHO ateşlemiyor.
Ross Youngblood

Yanıtlar:


356

VS 2012 ve VS 2015'te bulmak ve değiştirmek için aşağıdakileri yapabilirsiniz:

Örnek (syonip sayesinde)

Bul seçeneklerinde, 'normal ifadeleri kullan'ın işaretli olduğundan emin olun ve aşağıdakileri bulmak için metin olarak ekleyin:

_platformActions.InstallApp\((.+)\)

Ve yerine metin olarak aşağıdakileri yazın:

this.Platform().App($1).Install()

Not: SLaks aşağıdaki yorumda belirtildiği gibi, normal ifade sözdizimindeki değişiklik VS2012'nin standart .Net normal ifade motoruna geçmesinden kaynaklanmaktadır.

Not: Başka bir yorumcu bunun Visual Studio Code'da (vscode) da çalıştığına dikkat çekti


10
Daha genel olmak için, VS2012 artık standart .Net regex motorunu kullanıyor.
SLaks

4
Eğer arasındaki dönem kömürü kaçmaya gerek yok _platformActionsve InstallApp?
rory.ap

Şimdi bunu düşünmek mantıklı olurdu. Test etmedim. Oraya bir düzenleme yapmaktan çekinmeyin.
SgtPooki

1
Nihai olarak kullandığım sayısal olarak en azından benim için çalışmıyor gibi görünüyor. (?<rval>.+)arama ve değiştirme${rval}
Mark Schultheiss

2
Biraz ekstra yardım: Eğer (. *) Şeyi 18 $ ile değiştirmek istiyorsanız (yakalamadan hemen sonra '8' ekleyerek) $ {1} 8
Luc Bloom

17

Buna bir örnek eklemek için kodumda yapmam gereken bir şey var:

Ne buldun:

_platformActions.InstallApp\((.+)\)

İle değiştirin:

this.Platform().App($1).Install()

Bu, InstallApp (x) çağrısını bununla değiştirir. Platform (). App (x) .Install ().

* Bul seçeneklerinde "Normal ifadeleri kullan" olarak işaretlemeyi unutmayın


10

Grup adlarını kullanarak çalışmak istiyorsanız (yukarıdakiyle aynı örneği kullanarak):

Ne buldun:

_platformActions\.InstallApp\((?<mygroupname>.+)\)

İle değiştirin:

this.Platform().App(${mygroupname}).Install()

9

Yukarıdaki cevapları iyileştirmek için:

_platformActions.InstallApp\((.+)\)

ile

this.Platform().App(${1}).Install()

Zihin $ {1} Hiç yakalama arkasında bir numara eklemek istiyorsanız. iliştirilen $18ilki değil 18. arama yakalamasını eklemeye çalışır 8.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.