Mundarija
Quyidagi qatorlarda siz birinchi tartib raqamini oʻchirmoqchi boʻlsangiz, deylik. Bunday raqamlarning barchasi xesh belgisi (#) bilan boshlanadi va aniq 5 ta raqamdan iborat. Shunday qilib, biz ularni ushbu regex yordamida aniqlashimiz mumkin:
Pattern : #\d{5}\b
So'z chegarasi \b mos keladigan pastki qator bo'lmasligini bildiradi. #10000001 kabi kattaroq qatorning bir qismi.
Barcha mosliklarni olib tashlash uchun instance_num argumenti aniqlanmagan:
=RegExpReplace(A5, "#\d{5}\b", "")
Faqat birinchi hodisani yo'q qilish uchun biz instance_num argumentini 1 ga o'rnatdik:
=RegExpReplace(A5, "#\d{5}\b", "", 1)
Regex ba'zi belgilarni olib tashlash uchun
Stringdan ma'lum belgilarni olib tashlash uchun barcha keraksiz belgilarni yozib oling va ularni vertikal chiziq bilan ajrating.sintaksisi VBA RegExp cheklovlaridan xoli va ikkinchidan, ish kitoblaringizga hech qanday VBA kodini kiritishni talab qilmaydi, chunki barcha kod integratsiyasi biz tomonimizdan backend orqali amalga oshiriladi.
Sizning vazifangiz muntazam ifoda yaratish va funktsiyaga xizmat qiling :) Buni qanday qilishni amaliy misolda ko'rsataman.
Qavs va qavs ichidagi matnni regex yordamida qanday olib tashlash mumkin
Uzoq matn satrlarida unchalik muhim bo'lmagan ma'lumotlar ko'pincha [qavslar] va (qavslar) ichiga olinadi. Boshqa barcha ma'lumotlarni saqlagan holda, bu ahamiyatsiz tafsilotlarni qanday olib tashlash mumkin?
Aslida, biz HTML teglarini, ya'ni burchakli qavs ichidagi matnni o'chirish uchun shunga o'xshash regexni allaqachon qurganmiz. Shubhasiz, xuddi shu usullar kvadrat va dumaloq qavslar uchun ham ishlaydi.
Naqsh : (\(.*?\))
Agar kimdir uning asboblar qutisini oddiy iboralar bilan boyitsa, Excel qanchalik kuchli bo'lishini hech o'ylab ko'rganmisiz? Biz nafaqat o'ylab, balki ustida ishladik :) Va endi siz ushbu ajoyib RegEx funksiyasini o'zingizning ishchi kitoblaringizga qo'shishingiz va naqshga mos keladigan pastki qatorlarni qisqa vaqt ichida o'chirib tashlashingiz mumkin!
O'tgan hafta biz ko'rib chiqdik. Excelda satrlarni almashtirish uchun oddiy iboralardan qanday foydalanish haqida. Buning uchun biz maxsus Regex Replace funksiyasini yaratdik. Ma'lum bo'lishicha, funktsiya asosiy foydalanish doirasidan tashqariga chiqadi va nafaqat satrlarni almashtirishi, balki ularni olib tashlashi ham mumkin. Bu qanday bo'lishi mumkin? Excelga kelsak, qiymatni o'chirish uni bo'sh satr bilan almashtirishdan boshqa narsa emas, bu bizning Regex funksiyamiz juda yaxshi!
VBA RegExp funktsiyasi Excelda pastki qatorlarni olib tashlash
Barchamizga ma'lumki, Excelda odatiy iboralar sukut bo'yicha qo'llab-quvvatlanmaydi. Ularni yoqish uchun siz o'zingizning foydalanuvchi belgilagan funksiyangizni yaratishingiz kerak. Yaxshi xabar shundaki, bunday funktsiya allaqachon yozilgan, sinovdan o'tgan va foydalanishga tayyor. Bu kodni nusxalash, uni VBA muharririga joylashtirish va keyin faylni makros-yoqilgan ish kitobi (.xlsm) sifatida saqlash.
Funktsiyada quyidagi sintaksis:
RegExpReplace(matn, naqsh, almashtirish, [namuna_num], [match_case])Birinchi uchta argument talab qilinadi, oxirgi ikkitasi ixtiyoriy.
Bu yerda:
- Matn - izlash uchun matn qatoriu yopish qavsini topmaguncha mumkin.
Qaysi naqshni tanlasangiz, natija mutlaqo bir xil bo'ladi.
Masalan, A5 formatidagi satrdan barcha html teglarini olib tashlash va matnni qoldirish uchun, formula:
=RegExpReplace(A5, "]*>", "")
Yoki skrinshotda ko'rsatilganidek, dangasa kvantifikatordan foydalanishingiz mumkin:
Ushbu yechim juda yaxshi ishlaydi. bitta matn (5 - 9 qatorlar). Bir nechta matnlar uchun (10 - 12 qatorlar) natijalar shubhali - turli teglardan matnlar bittaga birlashtiriladi. Bu to'g'rimi yoki yo'qmi? Qo'rqaman, bu osonlikcha hal bo'ladigan narsa emas - barchasi kerakli natijani tushunishingizga bog'liq. Masalan, B11da "A1" natijasi kutilmoqda; B10da esa "ma'lumotlar1" va "ma'lumotlar2" bo'sh joy bilan ajratilishini xohlashingiz mumkin.
html teglarini olib tashlash va qolgan matnlarni bo'sh joylar bilan ajratish uchun siz shu tarzda davom etishingiz mumkin:
- Teglarni bo'sh qatorlar bilan emas " " bilan almashtiring:
=RegExpReplace(A5, "]*>", " ")
- Bir nechta bo'shliqlarni bitta bo'sh joy belgisiga qisqartiring:
=RegExpReplace(RegExpReplace(A5, "]*>", " "), " +", " ")
- Etakchi va keyingi boʻshliqlarni kesish:
=TRIM(RegExpReplace(RegExpReplace(A5, "]*>", " "), " +", " "))
Natija quyidagicha koʻrinadi:
Ablebits Regex Remove Tool
Agar sizda Excel uchun Ultimate Suite-dan foydalanish imkoni bo'lgan bo'lsa, ehtimol siz so'nggi versiyada taqdim etilgan yangi Regex vositalarini allaqachon kashf etgansiz. Ushbu .NET-ga asoslangan Regex funksiyalarining go'zalligi shundaki, ular birinchi navbatda to'liq xususiyatli muntazam ifodani qo'llab-quvvatlaydi O'chirish variantini tanlang va O'chirish tugmasini bosing.
Natijalarni qiymatlar emas, formulalar sifatida olish uchun Formula sifatida kiritish katagiga belgi qo'ying.
A2:A5 formatidagi satrlardan qavs ichidagi matnni olib tashlash uchun biz sozlamalarni sozlaymiz. quyidagicha:
Natijada AblebitsRegexRemove funksiyasi asl ma'lumotlaringiz yonidagi yangi ustunga kiritiladi.
Funktsiyani standart Funktsiyani qo'shish dialog oynasi orqali to'g'ridan-to'g'ri hujayraga kiritish mumkin, bu erda u AblebitsUDFs ostida tasniflanadi.
AblebitsRegexRemove matnni o'chirish uchun mo'ljallanganligi sababli, u faqat ikkita argumentni talab qiladi - manba qatori va regex. Ikkala parametr ham to'g'ridan-to'g'ri formulada aniqlanishi yoki hujayra havolalari ko'rinishida berilishi mumkin. Agar kerak bo'lsa, ushbu maxsus funksiyadan har qanday mahalliy funksiyalar bilan birga foydalanish mumkin.
Masalan, natijada paydo bo'lgan satrlarda qo'shimcha bo'shliqlarni kesish uchun siz TRIM funksiyasidan o'ram sifatida foydalanishingiz mumkin:
=TRIM(AblebitsRegexRemove(A5, $A$2))
Mana shunday oddiy iboralar yordamida Excelda satrlarni olib tashlash mumkin. O'qiganingiz uchun tashakkur va sizni keyingi hafta blogimizda ko'rishni orziqib kutaman!
Mavjud yuklab olishlar
Regex - misollar (.xlsm fayli) yordamida satrlarni olib tashlang
Ultimate Suite - sinov versiyasi (.exe fayli)
in.Qo'shimcha ma'lumot uchun RegExpReplace funksiyasiga qarang.
Maslahat. Oddiy hollarda, Excel formulalari yordamida hujayralardan ma'lum belgilar yoki so'zlarni olib tashlashingiz mumkin. Ammo oddiy iboralar buning uchun juda ko'p imkoniyatlarni taqdim etadi.
Normal iboralar yordamida qatorlarni qanday olib tashlash mumkin - misollar
Yuqorida aytib o'tilganidek, matnning naqshga mos qismlarini olib tashlash uchun ularni almashtirishingiz kerak. bo'sh satr bilan. Shunday qilib, umumiy formula quyidagi shaklni oladi:
RegExpReplace(matn, naqsh, "", [namuna_num], [match_case])Quyidagi misollarda ushbu asosiy tushunchaning turli xil ilovalari ko'rsatilgan.
O'chirish. barcha mosliklar yoki aniq moslik
RegExpReplace funksiyasi berilgan regexga mos keladigan barcha pastki qatorlarni topish uchun moʻljallangan. Qaysi hodisalarni olib tashlash nasol_num deb nomlangan 4-ixtiyoriy argument tomonidan boshqariladi.
Birlamchi parametr "barcha mos keladi" - nasol_num bo'lgandabirlashtirish operatori (&) va O'NG, O'RTA va CHAP kabi Matn funktsiyalari.
Masalan, barcha telefon raqamlarini (123) 456-7890 formatida yozish uchun formula:
="("&LEFT(B5, 3)&") "&MID(B5, 4, 3)&"-"&RIGHT(B5, 4)
Bu yerda B5 RegExpReplace funksiyasining chiqishi.
Regex yordamida maxsus belgilarni olib tashlang
Dasturlarimizdan birida, Biz o'rnatilgan va maxsus funktsiyalardan foydalangan holda Excelda keraksiz belgilarni qanday olib tashlashni ko'rib chiqdik. Muntazam iboralar ishlarni ancha osonlashtiradi! Oʻchiriladigan barcha belgilar roʻyxati oʻrniga, saqlamoqchi boʻlgan belgilarni koʻrsating :)
Naqsh inkor qilingan belgilar sinflariga asoslangan - belgilar sinfiga karet qoʻyiladi [^ ] qavs ichidagi EMAS har qanday bitta belgiga mos keladi. + kvantifikatori uni ketma-ket belgilarni bitta moslik deb hisoblashga majbur qiladi, shuning uchun almashtirish har bir alohida belgi uchun emas, balki mos keladigan pastki qatorga amalga oshiriladi.
Ehtiyojlaringizga qarab, quyidagi regexlardan birini tanlang.
alfanumerik bo'lmagan belgilarni, ya'ni harflar va raqamlardan tashqari barcha belgilarni o'chirish uchun:
Naqsh : [^0-9a-zA-Z] +
Barcha belgilarni tozalash uchun harflar , raqamlar va boʻshliqlar bundan mustasno:
Naqsh : [^0-9a-zA-Z ]+
Barcha belgilarni oʻchirish uchun harflar , raqamlar va pastki chiziqdan tashqari, siz \ dan foydalanishingiz mumkin W harf-raqamli belgi bo'lmagan har qanday belgi yokipastki chiziq:
Naqsh : \W+
Agar siz ba'zi boshqa belgilarni saqlamoqchi bo'lsangiz , masalan. tinish belgilari, ularni qavs ichiga qo'ying.
Masalan, harf, raqam, nuqta, vergul yoki bo'sh joydan boshqa har qanday belgini olib tashlash uchun quyidagi regexdan foydalaning:
Naqsh : [^0-9a-zA-Z\., ]+
Bu barcha maxsus belgilarni muvaffaqiyatli yoʻq qiladi, lekin qoʻshimcha boʻshliq qoladi.
Buni tuzatish uchun siz yuqoridagi funksiyani bir nechta boʻshliqlar oʻrnini bitta boʻsh joy belgisi bilan almashtiradigan boshqa funksiyaga joylashtirishingiz mumkin.
=RegExpReplace(RegExpReplace(A5,$A$2,""), " +", " ")
Yoki xuddi shu effektli mahalliy TRIM funksiyasidan foydalaning. :
=TRIM(RegExpReplace(A5, $A$2, ""))
Raqamli bo'lmagan belgilarni o'chirish uchun regex
Qatordagi barcha raqamli bo'lmagan belgilarni o'chirish uchun siz foydalanishingiz mumkin bu uzun formula yoki quyida keltirilgan juda oddiy regexlardan biri.
Raqam bo'lmagan har qanday belgini moslang:
Naqsh : \D+
Raqamli boʻlmagan belgilarni inkor qilingan sinflar yordamida ajratib oling:
Pattern : [^0-9]+
Pattern : [^\d] +
Maslahat. Agar sizning maqsadingiz matnni olib tashlash va qolgan raqamlarni alohida katakchalarga joylashtirish yoki ularning barchasini belgilangan ajratuvchi bilan ajratilgan bitta katakka joylashtirish bo‘lsa, RegExpExtract funksiyasidan oddiy iboralar yordamida qatordan raqamlarni qanday chiqarish bo‘limida tushuntirilganidek foydalaning.
Bo'sh joydan keyin hamma narsani o'chirish uchun Regex
Bo'sh joydan keyin hamma narsani o'chirish uchun bo'sh joy ( ) yokibirinchi bo'shliqni topish uchun bo'sh joy (\s) va undan keyingi belgilarga mos kelish uchun .* belgisi.
Agar sizda faqat oddiy bo'shliqlar bo'lgan bir qatorli satrlar bo'lsa (7-bitli ASCII tizimida qiymat 32) , quyidagi regexlardan qaysi birini ishlatishingiz muhim emas. Ko'p qatorli satrlar bo'lsa, u farq qiladi.
Barchasini o'chirish uchun bo'sh joy belgisidan , quyidagi regexdan foydalaning:
Pattern : " .*"
=RegExpReplace(A5, " .*", "")
Ushbu formula har bir satr dagi birinchi boʻshliqdan keyin hamma narsani oʻchiradi. Natijalar toʻgʻri koʻrsatilishi uchun Matnni oʻrash funksiyasini yoqganingizga ishonch hosil qiling.
Barcha boʻshliqdan keyin (jumladan, boʻsh joy, varaq, vagon va yangi qator) oʻchirish uchun regex bu:
Naqsh : \s.*
=RegExpReplace(A5, "\s.*", "")
Chunki \s bir nechta turli bo'shliq turlariga mos keladi, shu jumladan yangi qator (\n), bu formula hujayradagi birinchi boʻsh joydan keyin qancha qator boʻlishidan qatʼi nazar, hammasini oʻchirib tashlaydi.
Ma'lum bir matndan keyin matnni olib tashlash uchun regex. belgi
Oldingi misoldagi usullardan foydalanib, siz belgilagan har qanday belgidan keyin matnni o'chirishingiz mumkin.
Har bir qatorni alohida ishlash uchun:
Umumiy naqsh : char.*
Bir qatorli satrlarda bu char dan keyin hamma narsani olib tashlaydi. Ko'p qatorli satrlarda har bir satr alohida qayta ishlanadi, chunki VBA Regex ta'mida nuqta (.) yangidan tashqari har qanday belgiga mos keladi.satrning boshlanishi ^, biz nol yoki bir nechta bo'sh joy bo'lmagan belgilarni [^ ]* bilan moslashtiramiz, ular darhol bir yoki bir nechta bo'sh joydan keyin "+". Oxirgi qism natijalardagi mumkin boʻlgan boʻshliqlarning oldini olish uchun qoʻshiladi.
Har bir satrdagi birinchi boʻsh joy oldidan matnni olib tashlash uchun formula standart “barcha mosliklar” rejimida yoziladi ( nasol_num o'tkazib yuborilgan):
=RegExpReplace(A5, "^[^ ]* +", "")
Birinchi qatordagi birinchi bo'sh joy oldidagi matnni o'chirish va qolgan barcha satrlarni buzilmasdan qoldirish uchun instance_num argumenti 1 ga o'rnatiladi:
=RegExpReplace(A5, "^[^ ]* +", "", 1)
Belgidan oldin hamma narsani o'chirish uchun regex
Ma'lum bir belgi oldidan barcha matnlarni o'chirishning eng oson yo'li regexdan foydalanishdir shunga o'xshash:
Umumiy naqsh : ^[^char]*char
Inson tiliga tarjima qilinganda shunday deyiladi: "J tomonidan langarlangan string boshidan boshlab. , char [^char]*dan tashqari 0 yoki undan ortiq belgilarni moslang, to char birinchi marta paydo boʻlguncha.
Masalan, birinchi ikki nuqtadan oldingi barcha matnni oʻchirish uchun , ushbu oddiy iboradan foydalaning:
Naqsh : ^[^:]*:
Natijalarda oldingi boʻshliqlar qolmasligi uchun boʻsh joy belgisiga \s* qoʻshing. Bu hammasini olib tashlaydi g birinchi ikki nuqtadan oldin va undan keyin bo'sh joyni kesib oling:
Naqsh : ^[^:]*:\s*
=RegExpReplace(A5, "^[^:]*:\s*", "")
Maslahat. Muntazam iboralardan tashqari, Excel matnni pozitsiya yoki moslik bo'yicha olib tashlash uchun o'z vositalariga ega. Mahalliy formulalar bilan vazifani qanday bajarishni o'rganish uchun,Excelda belgidan oldin yoki keyin matnni qanday olib tashlash mumkin.
Regex, bundan tashqari hamma narsani olib tashlash uchun
Saqlamoqchi bo'lganlardan tashqari barcha belgilarni satrdan o'chirish uchun inkor qilingan belgilar sinflaridan foydalaning.
Masalan, kichik harflardan tashqari barcha belgilarni olib tashlash uchun va nuqtalar, regex quyidagicha:
Pattern : [^a-z\.]+
Aslida, biz bu yerda + kvantifikatorisiz ham qila olamiz, chunki bizning funktsiyamiz hamma narsani almashtiradi. mosliklar topildi. Miqdor ko'rsatkichi uni biroz tezroq qiladi - har bir alohida belgi bilan ishlash o'rniga siz pastki qatorni almashtirasiz.
=RegExpReplace(A5, "[^a-z\.]+", "")
Excelda html teglarini olib tashlash uchun Regex.
Birinchi navbatda shuni ta'kidlash kerakki, HTML oddiy til emas, shuning uchun uni oddiy iboralar yordamida tahlil qilish eng yaxshi usul emas. Ya'ni, regexlar ma'lumotlar to'plamini yanada toza qilish uchun hujayralaringizdan teglarni olib tashlashga yordam berishi mumkin.
Html teglari har doim burchakli qavslar ichida joylashganligini hisobga olsak, ularni quyidagi regexlardan biri yordamida topishingiz mumkin.
Inkor qilingan sinf:
Naqsh : ]*>
Bu yerda biz ochiladigan burchak qavsni moslashtiramiz, undan keyin har qanday belgi nol yoki undan koʻp takrorlanadi: yopilish burchagi qavs [^>]* eng yaqin yopilish burchagi qavsgacha.
Danqa qidiruv:
Naqsh :
Bu yerda biz mos kelamiz birinchi ochilish qavsdan birinchi yopish qavsgacha bo'lgan har qanday narsa. Savol belgisi .* ni kamroq belgilarga mos kelishiga majbur qiladisatr.
Barcha satrlarni bitta satr sifatida qayta ishlash uchun:
Umumiy naqsh : char(.