Excel-də müəyyən simvolları və ya mətni silmək üçün regex

  • Bunu Paylaş
Michael Brown
arqument buraxıldı, tapılan bütün uyğunluqlar silindi. Xüsusi uyğunluğu silmək üçün nümunə nömrəsini təyin edin.

Aşağıdakı sətirlərdə ilk sıra nömrəsini silmək istədiyinizi güman edin. Bütün belə nömrələr hash işarəsi (#) ilə başlayır və tam olaraq 5 rəqəmdən ibarətdir. Beləliklə, biz onları bu regexdən istifadə edərək müəyyən edə bilərik:

Nümunə : #\d{5}\b

\b sözü sərhəddi uyğun gələn alt sətir ola bilməyəcəyini bildirir. #10000001 kimi daha böyük sətirin bir hissəsi.

Bütün uyğunluqları silmək üçün instance_num arqumenti müəyyən edilməyib:

=RegExpReplace(A5, "#\d{5}\b", "")

Yalnız ilk hadisəni aradan qaldırmaq üçün biz instance_num arqumentini 1-ə təyin etdik:

=RegExpReplace(A5, "#\d{5}\b", "", 1)

Regex müəyyən simvolları silmək üçün

Müəyyən simvolları sətirdən çıxarmaq üçün bütün lazımsız simvolları yazın və onları şaquli çubuqla ayırınsintaksis VBA RegExp məhdudiyyətlərindən azaddır və ikincisi, iş kitablarınıza hər hansı VBA kodunun daxil edilməsini tələb etmir, çünki bütün kod inteqrasiyası bizim tərəfimizdən arxa hissədə həyata keçirilir.

İşinizin bir hissəsi müntəzəm ifadə yaratmaq və funksiyaya xidmət edin :) İcazə verin, bunu necə edəcəyinizi sizə praktiki nümunədə göstərim.

Mötərizədə və mötərizədə regexdən istifadə etməklə mətni necə silmək olar

Uzun mətn sətirlərində daha az vacib məlumatlar tez-tez [mötərizədə] və (mötərizədə) alınır. Bütün digər məlumatları saxlayaraq, bu aidiyyətsiz detalları necə silmək olar?

Əslində, biz html teqlərini, yəni bucaq mötərizələri daxilində mətni silmək üçün oxşar regex yaratmışıq. Aydındır ki, eyni üsullar kvadrat və dairəvi mötərizələr üçün də işləyəcək.

Nümunə : (\(.*?\))

Heç düşünmüsünüzmü ki, kimsə onun alətlər qutusunu müntəzəm ifadələrlə zənginləşdirə bilsəydi, Excel nə qədər güclü olardı? Biz nəinki fikirləşmişik, həm də üzərində işləmişik :) İndi isə siz bu gözəl RegEx funksiyasını öz iş kitablarınıza əlavə edə və naxışa uyğun gələn alt sətirləri qısa müddətdə silə bilərsiniz!

Keçən həftə biz baxdıq Excel-də sətirləri əvəz etmək üçün müntəzəm ifadələrdən necə istifadə etmək olar. Bunun üçün biz xüsusi Regex Replace funksiyası yaratdıq. Məlum oldu ki, funksiya ilkin istifadəsindən kənara çıxır və təkcə sətirləri əvəz edə bilməz, həm də onları silə bilər. Bu necə ola bilərdi? Excel baxımından dəyərin silinməsi onu boş sətirlə əvəz etməkdən başqa bir şey deyil, bizim Regex funksiyamız çox yaxşı bir şeydir!

Excel-də alt sətirləri silmək üçün VBA RegExp funksiyası

Hamımızın bildiyimiz kimi normal ifadələr Excel-də standart olaraq dəstəklənmir. Onları aktivləşdirmək üçün öz istifadəçi tərəfindən təyin edilmiş funksiyanızı yaratmalısınız. Yaxşı xəbər budur ki, belə bir funksiya artıq yazılıb, sınaqdan keçirilib və istifadəyə hazırdır. Etməli olduğunuz yeganə şey bu kodu kopyalamaq, onu VBA redaktorunuza yapışdırmaq və sonra faylınızı makro-aktiv iş kitabı (.xlsm) kimi saxlamaqdır.

Funksiyada aşağıdakı sintaksis:

RegExpReplace(mətn, nümunə, əvəz, [nümunə_num], [uyğun_case])

İlk üç arqument tələb olunur, sonuncu ikisi isteğe bağlıdır.

Burada:

  • Mətn - axtarış üçün mətn sətribağlanma mötərizəsini tapana qədər mümkündür.

Hansı nümunəni seçsəniz, nəticə tamamilə eyni olacaq.

Məsələn, A5-dəki sətirdən bütün html teqlərini silmək və mətni tərk etmək üçün, düstur belədir:

=RegExpReplace(A5, "]*>", "")

Və ya ekran görüntüsündə göstərildiyi kimi tənbəl kəmiyyət göstəricisindən istifadə edə bilərsiniz:

Bu həll aşağıdakılar üçün mükəmməl işləyir. tək mətn (sətir 5 - 9). Çoxsaylı mətnlər üçün (10 - 12-ci sətirlər) nəticələr şübhəlidir - müxtəlif teqlərdən olan mətnlər birinə birləşdirilir. Bu düzgündür ya yox? Qorxuram, bu, asanlıqla qərara alınacaq bir şey deyil - hər şey istədiyiniz nəticəni başa düşməyinizdən asılıdır. Məsələn, B11-də "A1" nəticəsi gözlənilir; B10-da olarkən siz "data1" və "data2"nin boşluqla ayrılmasını istəyə bilərsiniz.

html teqləri silmək və qalan mətnləri boşluqlarla ayırmaq üçün bu şəkildə davam edə bilərsiniz:

  1. Teqləri boş sətirlərlə deyil " " ilə əvəz edin:

    =RegExpReplace(A5, "]*>", " ")

  2. Birdən çox boşluqları tək boşluq simvoluna endirin:

    =RegExpReplace(RegExpReplace(A5, "]*>", " "), " +", " ")

  3. Aşağıdakı və arxadakı boşluqları kəsin:

    =TRIM(RegExpReplace(RegExpReplace(A5, "]*>", " "), " +", " "))

Nəticə belə görünəcək:

Ablebits Regex Silme Aləti

Əgər Excel üçün Ultimate Suite-imizdən istifadə etmək şansınız varsa, yəqin ki, siz son buraxılışla təqdim olunan yeni Regex Alətlərini kəşf etmisiniz. Bu .NET əsaslı Regex funksiyalarının gözəlliyi ondadır ki, onlar, ilk növbədə, tam xüsusiyyətli müntəzəm ifadəni dəstəkləyirlər Sil seçimini edin və Sil düyməsini basın.

Nəticələri dəyərlər deyil, düsturlar kimi əldə etmək üçün Düstur kimi daxil et qutusunu seçin.

A2:A5-də sətirlərdən mötərizədə mətni silmək üçün biz parametrləri konfiqurasiya edirik aşağıdakı kimi:

Nəticədə AblebitsRegexRemove funksiyası orijinal məlumatınızın yanında yeni sütuna daxil edilir.

Funksiya həmçinin standart Funksiya daxil et dialoq qutusu vasitəsilə birbaşa xanaya daxil edilə bilər, burada AblebitsUDFs altında təsnif edilir.

AblebitsRegexRemove mətni silmək üçün nəzərdə tutulduğundan, o, yalnız iki arqument tələb edir - mənbə sətri və regex. Hər iki parametr birbaşa formula ilə müəyyən edilə bilər və ya hüceyrə istinadları şəklində təqdim edilə bilər. Lazım gələrsə, bu fərdi funksiya istənilən yerli funksiya ilə birlikdə istifadə edilə bilər.

Məsələn, nəticədə yaranan sətirlərdə əlavə boşluqları kəsmək üçün siz TRIM funksiyasından sarğı kimi istifadə edə bilərsiniz:

=TRIM(AblebitsRegexRemove(A5, $A$2))

Mütləq ifadələrdən istifadə edərək Excel-də sətirləri belə silmək olar. Oxuduğunuz üçün sizə təşəkkür edirəm və sizi gələn həftə bloqumuzda görməyi səbirsizliklə gözləyirəm!

Mövcud endirmələr

Regex istifadə edərək sətirləri silin - nümunələr (.xlsm faylı)

Ultimate Suite - sınaq versiyası (.exe faylı)

in.
  • Nümunə - axtarmaq üçün müntəzəm ifadə.
  • Əvəzetmə - ilə əvəz ediləcək mətn. Nümunəyə uyğun alt sətirləri silmək üçün əvəz etmək üçün boş sətir ("") istifadə edin.
  • Nümunə_num (isteğe bağlı) - nümunə əvəz et. Buraxıldıqda, tapılan bütün uyğunluqlar əvəz olunur (defolt).
  • Uyğun_case (isteğe bağlı) - mətn rejissorunun uyğun olub-olmamasını və ya nəzərə alınmamasını göstərən Boolean dəyəri. Hərfi-həssas uyğunluq üçün TRUE istifadə edin (defolt); böyük hərflərə həssas olmayan üçün - YANLIŞ.
  • Ətraflı məlumat üçün RegExpReplace funksiyasına baxın.

    İpucu. Sadə hallarda, Excel düsturları ilə xanalardan xüsusi simvolları və ya sözləri silə bilərsiniz. Lakin müntəzəm ifadələr bunun üçün daha çox seçimlər təqdim edir.

    Normal ifadələrdən istifadə edərək sətirləri necə silmək olar - misallar

    Yuxarıda qeyd edildiyi kimi, nümunəyə uyğun mətn hissələrini silmək üçün onları əvəz etməlisiniz. boş bir sim ilə. Beləliklə, ümumi düstur bu formanı alır:

    RegExpReplace(mətn, nümunə, "", [instance_num], [uyğun_case])

    Aşağıdakı nümunələr bu əsas konsepsiyanın müxtəlif tətbiqlərini göstərir.

    Silin bütün uyğunluqlar və ya xüsusi uyğunluq

    RegExpReplace funksiyası verilmiş regexə uyğun gələn bütün alt sətirləri tapmaq üçün nəzərdə tutulub. Silinəcək hadisələr instance_num adlı 4-cü isteğe bağlı arqument tərəfindən idarə olunur.

    Defolt olaraq "bütün uyğunluqlar"dır - instance_num olduqda.birləşdirici operator (&) və RIGHT, MID və SOL kimi Mətn funksiyaları.

    Məsələn, bütün telefon nömrələrini (123) 456-7890 formatında yazmaq üçün formula belədir:

    ="("&LEFT(B5, 3)&") "&MID(B5, 4, 3)&"-"&RIGHT(B5, 4)

    Burada B5 RegExpReplace funksiyasının çıxışıdır.

    Regexdən istifadə edərək xüsusi simvolları silin

    Dərsliklərimizdən birində, daxili və xüsusi funksiyalardan istifadə edərək Excel-də arzuolunmaz simvolların necə silinməsinə baxdıq. Daimi ifadələr işləri çox asanlaşdırır! Silinəcək bütün simvolları sadalamaq əvəzinə, saxlamaq istədiyinizləri qeyd edin :)

    Nümunə inkar edilmiş simvol siniflərinə əsaslanır - simvol sinfinin içərisinə karet qoyulur [^ ] mötərizədə DEYİL hər hansı bir simvolu uyğunlaşdırmaq üçün. + kəmiyyət göstəricisi onu ardıcıl simvolları tək uyğunluq kimi qəbul etməyə məcbur edir, beləliklə, hər bir fərdi simvol üçün deyil, uyğun gələn alt sətir üçün əvəz edilir.

    Ehtiyaclarınızdan asılı olaraq, aşağıdakı regexlərdən birini seçin.

    qeyri-rəqəmsal simvolları, yəni hərf və rəqəmlərdən başqa bütün simvolları silmək üçün:

    Nümunə : [^0-9a-zA-Z] +

    Bütün simvolları təmizləmək üçün hərflər , rəqəmlər boşluqlar istisna olmaqla:

    Nümunə : [^0-9a-zA-Z ]+

    Hərflər , rəqəmlər alt xətt istisna olmaqla, bütün simvolları silmək üçün \ istifadə edə bilərsiniz. W hərf-rəqəm simvolu olmayan hər hansı simvolu ifadə ediralt xətt:

    Nümunə : \W+

    Əgər siz digər simvolları saxlamaq istəyirsinizsə, məs. durğu işarələri, onları mötərizənin içərisinə qoyun.

    Məsələn, hərf, rəqəm, nöqtə, vergül və ya boşluqdan başqa hər hansı simvolu silmək üçün aşağıdakı regexdən istifadə edin:

    Nümunə : [^0-9a-zA-Z\., ]+

    Bu, bütün xüsusi simvolları uğurla aradan qaldırır, lakin əlavə boşluq qalır.

    Bunu düzəltmək üçün yuxarıdakı funksiyanı birdən çox boşluğu tək boşluq simvolu ilə əvəz edən başqa funksiyaya yerləşdirə bilərsiniz.

    =RegExpReplace(RegExpReplace(A5,$A$2,""), " +", " ")

    Və ya sadəcə eyni effektlə yerli TRIM funksiyasından istifadə edin :

    =TRIM(RegExpReplace(A5, $A$2, ""))

    Qeyri-rəqəm simvolları silmək üçün regex

    Sətrdən bütün qeyri-rəqəm simvollarını silmək üçün istifadə edə bilərsiniz ya bu uzun düstur, ya da aşağıda sadalanan çox sadə regexlərdən biri.

    Rəqəm DEYİL hər hansı simvolu uyğunlaşdırın:

    Nümunə : \D+

    İnkar edilmiş siniflərdən istifadə edərək rəqəmsiz simvolları ayırın:

    Nümunə : [^0-9]+

    Nümunə : [^\d] +

    İpucu. Məqsədiniz mətni silmək və qalan nömrələri ayrı-ayrı xanalara tökmək və ya hamısını müəyyən bir ayırıcı ilə ayrılmış bir xanaya yerləşdirməkdirsə, RegExpExtract funksiyasından adi ifadələrdən istifadə edərək sətirdən nömrələri necə çıxarmaq olar bölməsində izah edildiyi kimi istifadə edin.

    Boşluqdan sonra hər şeyi silmək üçün Regex

    Boşluqdan sonra hər şeyi silmək üçün boşluqdan ( ) və ya istifadə edinbirinci boşluğu tapmaq üçün boşluq (\s) simvolu və ondan sonrakı hər hansı simvollarla uyğunlaşmaq üçün .* simvolu.

    Yalnız normal boşluqları ehtiva edən tək sətirli sətirləriniz varsa (7 bitlik ASCII sistemində dəyər 32) , aşağıda göstərilən regexlərdən hansını istifadə etməyiniz həqiqətən də fərq etmir. Çox sətirli sətirlər olduqda, bu, fərq yaradır.

    Boşluq simvolundan sonra hər şeyi silmək üçün bu regexdən istifadə edin:

    Nümunə : " .*"

    =RegExpReplace(A5, " .*", "")

    Bu düstur hər sətirdə birinci boşluqdan sonra hər şeyi siləcək. Nəticələrin düzgün göstərilməsi üçün Mətni Sarma funksiyasını yandırdığınızdan əmin olun.

    Hər şeyi silmək üçün boşluqdan (boşluq, tab, karetanın qaytarılması və yeni sətir daxil olmaqla) regex budur:

    Nümunə : \s.*

    =RegExpReplace(A5, "\s.*", "")

    Çünki \s yeni sətir (\n), bu düstur hüceyrədə neçə sətir olmasından asılı olmayaraq, ilk boşluqdan sonra hər şeyi silir.

    Xüsusi mətndən sonra mətni silmək üçün regex simvol

    Əvvəlki nümunədəki üsullardan istifadə edərək, siz təyin etdiyiniz hər hansı simvoldan sonra mətni silə bilərsiniz.

    Hər sətri ayrıca idarə etmək üçün:

    Ümumi model : char.*

    Bir sətirli sətirlərdə bu, char -dən sonra hər şeyi siləcək. Çox sətirli sətirlərdə hər bir sətir fərdi şəkildə işlənəcək, çünki VBA Regex ləzzətində nöqtə (.) yeni simvoldan başqa istənilən simvola uyğun gəlir.sətirin başlanğıcında ^, biz sıfır və ya daha çox boşluq olmayan simvolları [^ ]* ilə uyğunlaşdırırıq, onlardan dərhal sonra bir və ya daha çox boşluq "+" gəlir. Nəticələrdə potensial qabaqcıl boşluqların qarşısını almaq üçün sonuncu hissə əlavə edilir.

    Hər sətirdə birinci boşluqdan əvvəl mətni silmək üçün düstur defolt "bütün uyğunluqlar" rejimində yazılır ( instance_num ). buraxılmışdır):

    =RegExpReplace(A5, "^[^ ]* +", "")

    Birinci sətirdəki ilk boşluqdan əvvəl mətni silmək və bütün digər sətirləri toxunulmaz qoymaq üçün instance_num arqumenti 1-ə təyin edilmişdir:

    =RegExpReplace(A5, "^[^ ]* +", "", 1)

    Xarakterdən əvvəl hər şeyi silmək üçün regex

    Konkret simvoldan əvvəl bütün mətni silməyin ən asan yolu regexdən istifadə etməkdir bu kimi:

    Ümumi nümunə : ^[^char]*char

    İnsan dilinə tərcümə edilmiş, o deyir: "^ tərəfindən lövbərlənmiş sətirin başlanğıcından , char [^char]* istisna olmaqla, 0 və ya daha çox simvolu uyğunlaşdırın. , bu müntəzəm ifadədən istifadə edin:

    Nümunə : ^[^:]*:

    Nəticələrdə aparıcı boşluqların qarşısını almaq üçün boşluq simvolunu \s* əlavə edin. Bu, hər şeyi siləcək g birinci iki nöqtədən əvvəl və ondan dərhal sonra boşluqları kəsin:

    Nümunə : ^[^:]*:\s*

    =RegExpReplace(A5, "^[^:]*:\s*", "")

    İpucu. Normal ifadələrlə yanaşı, Excel-in mətni mövqeyə və ya uyğunluğa görə silmək üçün öz vasitələri var. Tapşırığı yerli düsturlarla yerinə yetirməyi öyrənmək üçün,Excel-də simvoldan əvvəl və ya sonra mətni necə silmək olar.

    Regex istisna olmaqla hər şeyi silmək üçün

    Saxlamaq istədiyiniz simvollardan başqa bütün simvolları silmək üçün inkar edilmiş simvol siniflərindən istifadə edin.

    Məsələn, kiçik hərflərdən başqa bütün simvolları silmək üçün və nöqtələr üçün regex belədir:

    Nümunə : [^a-z\.]+

    Əslində burada + kəmiyyət göstəricisi olmadan da edə bilərik, çünki funksiyamız hamısını əvəz edir. uyğunluqlar tapdı. Kəmiyyət göstəricisi onu bir qədər sürətləndirir - hər bir simvolla işləmək əvəzinə, alt sətri əvəz edirsiniz.

    =RegExpReplace(A5, "[^a-z\.]+", "")

    Excel-də html teqlərini silmək üçün Regex.

    İlk olaraq qeyd etmək lazımdır ki, HTML adi dil deyil, ona görə də onu müntəzəm ifadələrdən istifadə edərək təhlil etmək ən yaxşı yol deyil. Bununla belə, regekslər verilənlər bazanızı daha təmiz etmək üçün mütləq xanalarınızdan teqləri çıxarmağa kömək edə bilər.

    Nəzərə alsaq ki, html teqlər həmişə bucaqlı mötərizədə yerləşdirilir, siz onları aşağıdakı regexlərdən birini istifadə edərək tapa bilərsiniz.

    İnkar edilmiş sinif:

    Nümunə : ]*>

    Burada biz açılış bucağı mötərizəsini uyğunlaşdırırıq, ardınca hər hansı simvolun sıfır və ya daha çox təkrarı gəlir. bağlanan bucaq mötərizəsi [^>]* ən yaxın bağlanan bucaq mötərizəsinə qədər.

    Tənbəl axtarış:

    Nümunə :

    Burada uyğunlaşırıq ilk açılış mötərizəsindən tutmuş ilk bağlama mötərizəsinə qədər hər şey. Sual işarəsi .* kimi az simvolu uyğunlaşdırmağa məcbur edirsətir.

    Bütün sətirləri tək sətir kimi emal etmək üçün:

    Ümumi model : char(.

    Michael Brown proqram alətlərindən istifadə edərək mürəkkəb prosesləri sadələşdirməyə həvəsi olan xüsusi texnologiya həvəskarıdır. Texnologiya sənayesində on ildən artıq təcrübəyə malik olmaqla, o, Microsoft Excel və Outlook, həmçinin Google Cədvəl və Sənədlərdə bacarıqlarını mükəmməlləşdirib. Mayklın bloqu öz biliyini və təcrübəsini başqaları ilə bölüşməyə, məhsuldarlığı və səmərəliliyi artırmaq üçün asan izlənilən məsləhətlər və dərslikləri təqdim etməyə həsr olunub. İstər təcrübəli peşəkar, istərsə də yeni başlayan biri olmağınızdan asılı olmayaraq, Mayklın bloqu bu vacib proqram alətlərindən maksimum yararlanmaq üçün dəyərli fikirlər və praktiki məsləhətlər təklif edir.