Regex для выдалення пэўных сімвалаў або тэксту ў Excel

  • Падзяліцца Гэтым
Michael Brown
аргумент апушчаны, усе знойдзеныя супадзенні выдаляюцца. Каб выдаліць пэўны супадзенне, вызначыце нумар экзэмпляра.

У радках ніжэй выкажам здагадку, што вы хочаце выдаліць нумар першага парадку. Усе такія лікі пачынаюцца са знака хрыбетніка (#) і ўтрымліваюць роўна 5 лічбаў. Такім чынам, мы можам ідэнтыфікаваць іх з дапамогай гэтага рэгулярнага выразу:

Шаблон : #\d{5}\b

Мяжа слова \b вызначае, што адпаведны падрадок не можа быць частка большага радка, напрыклад #10000001.

Каб выдаліць усе супадзенні, аргумент instance_num не вызначаны:

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

Каб выкараніць толькі першае з'яўленне, мы ўсталёўваем аргумент instance_num у 1:

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

Regex каб выдаліць пэўныя сімвалы

Каб выдаліць пэўныя сімвалы з радка, проста запішыце ўсе непатрэбныя сімвалы і аддзяліце іх вертыкальнай паласойсінтаксіс не мае абмежаванняў VBA RegExp, а па-другое, не патрабуецца ўстаўляць код VBA у вашы кнігі, паколькі ўся інтэграцыя кода выконваецца намі на серверы.

Ваша частка працы заключаецца ў стварэнні рэгулярнага выразу і падайце гэта функцыі :) Дазвольце мне паказаць вам, як гэта зрабіць на практычным прыкладзе.

Як выдаліць тэкст у дужках і дужках з дапамогай рэгулярных выразаў

У доўгіх тэкставых радках менш важная інфармацыя часта бярэцца ў [дужкі] і (дужкі). Як выдаліць гэтыя недарэчныя дэталі, захаваўшы ўсе астатнія даныя?

Насамрэч, мы ўжо стварылі падобны рэгулярны выраз для выдалення HTML-тэгаў, г.зн. тэксту ў вуглавых дужках. Відавочна, што тыя ж метады будуць працаваць і для квадратных і круглых дужак.

Шаблон : (\(.*?\))

Ці думалі вы калі-небудзь, наколькі магутным быў бы Excel, калі б нехта мог узбагаціць яго набор інструментаў рэгулярнымі выразамі? Мы не толькі думалі, але і працавалі над гэтым :) І цяпер вы можаце дадаць гэтую цудоўную функцыю RegEx у свае ўласныя працоўныя кнігі і імгненна выдаляць падрадкі, якія адпавядаюць шаблону!

На мінулым тыдні мы паглядзелі як выкарыстоўваць рэгулярныя выразы для замены радкоў у Excel. Для гэтага мы стварылі карыстальніцкую функцыю Regex Replace. Як аказалася, функцыя выходзіць за рамкі свайго асноўнага выкарыстання і можа не толькі замяняць радкі, але і выдаляць іх. Як такое магло быць? З пункту гледжання Excel, выдаленне значэння - гэта не што іншае, як замена яго пустым радком, у чым наша функцыя Regex вельмі добрая!

Функцыя VBA RegExp для выдалення падрадкоў у Excel

Як мы ўсе ведаем, рэгулярныя выразы не падтрымліваюцца ў Excel па змаўчанні. Каб уключыць іх, вам трэба стварыць уласную функцыю, вызначаную карыстальнікам. Добрая навіна заключаецца ў тым, што такая функцыя ўжо напісана, пратэставана і гатова да выкарыстання. Усё, што вам трэба зрабіць, гэта скапіяваць гэты код, уставіць яго ў ваш рэдактар ​​VBA, а затым захаваць файл як рабочую кнігу з падтрымкай макрасаў (.xlsm).

Функцыя мае наступны сінтаксіс:

RegExpReplace(тэкст, шаблон, замена, [нумер_экзэмпляра], [рэгістр_супадзення])

Першыя тры аргументы абавязковыя, два апошнія неабавязковыя.

Дзе:

  • Тэкст - тэкставы радок для пошукумагчыма, пакуль ён не знойдзе зачыняючую дужку.

Які б шаблон вы ні абралі, вынік будзе абсалютна аднолькавы.

Напрыклад, каб выдаліць усе тэгі html з радка ў A5 і пакінуць тэкст, формула:

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

Або вы можаце выкарыстоўваць лянівы квантар, як паказана на скрыншоце:

Гэтае рашэнне ідэальна працуе для адзін тэкст (радкі 5 - 9). Для некалькіх тэкстаў (радкі 10 - 12) вынікі сумнеўныя - тэксты з розных тэгаў аб'ядноўваюцца ў адзін. Гэта правільна ці не? Баюся, гэта не тое, што можна лёгка вырашыць - усё залежыць ад вашага разумення жаданага выніку. Напрыклад, у В11 чакаецца вынік «А1»; у той час як у B10, вы можаце пажадаць, каб "data1" і "data2" былі падзеленыя прабелам.

Каб выдаліць тэгі html і аддзяліць астатнія тэксты прабеламі, вы можаце паступіць наступным чынам:

  1. Замяніць тэгі прабеламі " ", а не пустымі радкамі:

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

  2. Скараціць некалькі прабелаў да аднаго прабелу:

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

  3. Скарачэнне прабелаў у пачатку і ў канцы:

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

Вынік будзе выглядаць прыкладна так:

Інструмент выдалення рэгулярных выразаў Ablebits

Калі ў вас была магчымасць карыстацца нашым найвышэйшым пакетам для Excel, вы, верагодна, ужо адкрылі для сябе новыя інструменты рэгулярных выразаў, прадстаўленыя ў апошнім выпуску. Прыгажосць гэтых функцый рэгулярных выразаў на аснове .NET заключаецца ў тым, што яны, па-першае, падтрымліваюць поўнафункцыянальны рэгулярны выразопцыю Выдаліць і націсніце Выдаліць .

Каб атрымаць вынікі ў выглядзе формул, а не значэнняў, усталюйце сцяжок Уставіць як формулу .

Каб выдаліць тэкст у дужках з радкоў у A2:A5, мы канфігуруем параметры наступным чынам:

У выніку функцыя AblebitsRegexRemove устаўляецца ў новы слупок побач з вашымі зыходнымі дадзенымі.

Функцыя таксама можа быць уведзена непасрэдна ў ячэйку праз стандартнае дыялогавае акно Уставіць функцыю , дзе яна класіфікуецца як AblebitsUDFs .

Паколькі AblebitsRegexRemove прызначаны для выдалення тэксту, яму патрэбны толькі два аргументы - зыходны радок і рэгулярны выраз. Абодва параметры могуць быць вызначаны непасрэдна ў формуле або пададзены ў выглядзе спасылак на ячэйкі. Пры неабходнасці гэту карыстальніцкую функцыю можна выкарыстоўваць разам з любымі ўласнымі.

Напрыклад, каб скараціць лішнія прабелы ў атрыманых радках, вы можаце выкарыстоўваць функцыю TRIM як абгортку:

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

Вось як можна выдаліць радкі ў Excel з дапамогай рэгулярных выразаў. Я дзякую вам за чытанне і з нецярпеннем чакаю сустрэчы з вамі ў нашым блогу на наступным тыдні!

Даступныя спампоўкі

Выдаленне радкоў з выкарыстаннем рэгулярных выразаў - прыклады (файл .xlsm)

Ultimate Suite - пробная версія (.exe файл)

in.
  • Шаблон - рэгулярны выраз для пошуку.
  • Замена - тэкст, якім трэба замяніць. Каб выдаліць падрадкі , якія адпавядаюць шаблону, выкарыстоўвайце пусты радок ("") для замены.
  • Instance_num (неабавязкова) - асобнік для замяніць. Калі прапушчана, усе знойдзеныя супадзенні замяняюцца (па змаўчанні).
  • Match_case (неабавязкова) - лагічнае значэнне, якое паказвае, трэба ці ігнараваць рэгістр тэксту. Для супастаўлення з улікам рэгістра выкарыстоўвайце TRUE (па змаўчанні); для без уліку рэгістра - FALSE.
  • Для атрымання дадатковай інфармацыі, калі ласка, глядзіце функцыю RegExpReplace.

    Падказка. У простых выпадках вы можаце выдаліць пэўныя сімвалы або словы з вочак з дапамогай формул Excel. Але рэгулярныя выразы даюць нашмат больш варыянтаў для гэтага.

    Як выдаліць радкі з дапамогай рэгулярных выразаў - прыклады

    Як згадвалася вышэй, каб выдаліць часткі тэксту, якія адпавядаюць шаблону, вы павінны іх замяніць з пустым радком. Такім чынам, агульная формула прымае такую ​​форму:

    RegExpReplace(text, pattern, "", [instance_num], [match_case])

    У прыведзеных ніжэй прыкладах паказаны розныя рэалізацыі гэтай базавай канцэпцыі.

    Выдаліць усе супадзенні або пэўныя супадзенні

    Функцыя RegExpReplace прызначана для пошуку ўсіх падрадкоў, якія адпавядаюць зададзенаму рэгулярнаму выразу. Якія ўваходжанні трэба выдаліць, кантралюецца 4-м неабавязковым аргументам з назвай instance_num .

    Па змаўчанні "усе супадае" - калі instance_num аператар канкатэнацыі (&) і тэкставыя функцыі, такія як RIGHT, MID і LEFT.

    Напрыклад, каб запісаць усе тэлефонныя нумары ў фармаце (123) 456-7890, формула:

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

    Дзе B5 з'яўляецца выхадам функцыі RegExpReplace.

    Выдаліце ​​спецыяльныя сімвалы з дапамогай рэгулярнага выразу

    У адным з нашых падручнікаў, мы разгледзелі, як выдаліць непатрэбныя сімвалы ў Excel з дапамогай убудаваных і карыстацкіх функцый. Рэгулярныя выразы значна палягчаюць працу! Замест таго, каб пералічваць усе сымбалі для выдаленьня, проста ўкажыце тыя, якія вы жадаеце захаваць :)

    Шаблён заснаваны на адмоўных клясах сымбаляў - унутры клясы сымбаляў зьмяшчаецца карэтка [^ ], каб адпавядаць любому асобнаму сімвалу НЕ ў дужках. Квантар + прымушае яго разглядаць паслядоўныя сімвалы як адно супадзенне, так што замена выконваецца для адпаведнага падрадка, а не для кожнага асобнага сімвала.

    У залежнасці ад вашых патрэбаў, абярыце адзін з наступных рэгулярных выразаў.

    Каб выдаліць нелітарна-лічбавыя сімвалы, г.зн. усе сімвалы, акрамя літар і лічбаў:

    Шаблон : [^0-9a-zA-Z] +

    Каб ачысціць усе сімвалы акрамя літар , лічбаў і прабелаў :

    Шаблон : [^0-9a-zA-Z ]+

    Каб выдаліць усе сімвалы акрамя літар , лічбаў і падкрэслівання , вы можаце выкарыстоўваць \ W, які азначае любы сімвал, які НЕ з'яўляецца літарна-лічбавым сімвалам абопадкрэсліванне:

    Шаблон : \W+

    Калі вы хочаце захаваць некаторыя іншыя сімвалы , напр. знакі прыпынку, пастаўце іх у дужкі.

    Напрыклад, каб выдаліць любы сімвал, акрамя літары, лічбы, кропкі, коскі ці прабелу, выкарыстоўвайце наступны рэгулярны выраз:

    Шаблон : [^0-9a-zA-Z\., ]+

    Гэта паспяхова выдаляе ўсе спецыяльныя сімвалы, але лішнія прабелы застаюцца.

    Каб выправіць гэта, вы можаце ўкласці пазначаную вышэй функцыю ў іншую, якая замяняе некалькі прабелаў адным прабелам.

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

    Або проста выкарыстайце ўласную функцыю TRIM з такім жа эфектам :

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

    Рэгулярны выраз для выдалення нелічбавых сімвалаў

    Каб выдаліць усе нелічбавыя сімвалы з радка, вы можаце выкарыстоўваць альбо гэтая доўгая формула, альбо адзін з вельмі простых рэгулярных выразаў, пералічаных ніжэй.

    Спавядзіце любы сімвал, які НЕ з'яўляецца лічбай:

    Шаблон : \D+

    Выдаленне нелічбавых сімвалаў з выкарыстаннем адмоўленых класаў:

    Шаблон : [^0-9]+

    Шаблон : [^\d] +

    Савет. Калі ваша мэта складаецца ў тым, каб выдаліць тэкст і разнесці астатнія лічбы ў асобныя ячэйкі або змясціць іх усе ў адну ячэйку, падзеленую вызначаным раздзяляльнікам, выкарыстоўвайце функцыю RegExpExtract, як апісана ў раздзеле «Як атрымаць лічбы з радка з дапамогай рэгулярных выразаў».

    Рэгулярны выраз для выдалення ўсяго пасля прабелу

    Каб сцерці ўсё пасля прабелу, выкарыстоўвайце альбо прабел ( ), альбосімвал прабелу (\s), каб знайсці першы прабел, і .*, каб адпавядаць любым сімвалам пасля яго.

    Калі ў вас ёсць аднарадковыя радкі, якія змяшчаюць толькі звычайныя прабелы (значэнне 32 у 7-бітнай сістэме ASCII) , не мае значэння, які з прыведзеных ніжэй рэгулярных выразаў вы выкарыстоўваеце. У выпадку шматрадковых радкоў гэта мае значэнне.

    Каб выдаліць усё пасля прабелу , выкарыстоўвайце гэты рэгулярны выраз:

    Шаблон : " .*"

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

    Гэта формула пазбавіць усё пасля першага прабелу ў кожным радку . Каб вынікі адлюстроўваліся карэктна, пераканайцеся, што ўключаны параметр Wrap Text.

    Каб выдаліць усё пасля прабелу (уключаючы прабел, табуляцыю, вяртанне карэткі і новы радок), рэгулярны выраз гэта:

    Шаблон : \s.*

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

    Таму што \s адпавядае некалькім розным тыпам прабелаў, уключаючы новы радок (\n), гэтая формула выдаляе ўсё пасля першага прабелу ў ячэйцы, незалежна ад таго, колькі ў ёй радкоў.

    Рэгулярны выраз для выдалення тэксту пасля пэўных сімвал

    Выкарыстоўваючы метады з папярэдняга прыкладу, вы можаце выдаліць тэкст пасля любога ўказанага вамі сімвала.

    Каб апрацоўваць кожны радок асобна:

    Агульны шаблон : char.*

    У аднарадковых радках гэта выдаліць усё пасля char . У шматрадковых радках кожны радок будзе апрацоўвацца асобна, таму што ў VBA Regex кропка (.) адпавядае любому сімвалу, акрамя новагапачатак радка ^, мы супастаўляем нуль ці больш знакаў, якія не з'яўляюцца прабеламі [^ ]*, за якімі адразу ідуць адзін або некалькі прабелаў " +". Апошняя частка дадаецца для прадухілення патэнцыйных прабелаў у выніках.

    Каб выдаліць тэкст перад першым прабелам у кожным радку, формула запісваецца ў стандартным рэжыме «ўсе супадзенні» ( instance_num прапушчана):

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

    Каб выдаліць тэкст перад першым прабелам у першым радку і пакінуць усе астатнія радкі некранутымі, аргумент instance_num усталёўваецца ў 1:

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

    Рэгулярны выраз для выдалення ўсяго перад сімвалам

    Самы просты спосаб выдаліць увесь тэкст перад пэўным сімвалам - выкарыстоўваць рэгулярны выраз вось так:

    Агульны ўзор : ^[^char]*char

    У перакладзе на чалавечую мову гаворыцца: "ад пачатку радка, замацаванага ^ , адпавядаюць 0 ці больш сімвалам, акрамя char [^char]* да першага ўваходжання char .

    Напрыклад, каб выдаліць увесь тэкст перад першым двукроп'ем , выкарыстоўвайце гэты рэгулярны выраз:

    Шаблон : ^[^:]*:

    Каб пазбегнуць прабелаў у выніках, дадайце прабел \s* у канец. Гэта выдаліць усё g перад першым двукроп'ем і абрэжце ўсе прабелы адразу пасля яго:

    Шаблон : ^[^:]*:\s*

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

    Савет. Акрамя рэгулярных выразаў, Excel мае ўласныя сродкі для выдалення тэксту па пазіцыі або адпаведнасці. Каб даведацца, як выканаць задачу з роднымі формуламі,глядзіце, як выдаліць тэкст да або пасля сімвала ў Excel.

    Рэгулярны выраз для выдалення ўсяго, акрамя

    Каб выдаліць усе сімвалы з радка, акрамя тых, якія вы хочаце захаваць, выкарыстоўвайце адмоўленыя класы сімвалаў.

    Напрыклад, каб выдаліць усе сімвалы, акрамя малых літар і кропкі, рэгулярны выраз:

    Шаблон : [^a-z\.]+

    Насамрэч, мы маглі б абысціся тут без квантара +, бо наша функцыя замяняе ўсе знойдзены супадзенні. Квантар проста робіць гэта крыху хутчэй - замест таго, каб апрацоўваць кожны асобны сімвал, вы замяняеце падрадок.

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

    Regex для выдалення тэгаў html у Excel

    Па-першае, варта адзначыць, што HTML не з'яўляецца звычайнай мовай, таму разбор яго з дапамогай рэгулярных выразаў - не найлепшы спосаб. Тым не менш, рэгулярныя выразы вызначана могуць дапамагчы выдаліць тэгі з вашых ячэек, каб зрабіць ваш набор даных больш чыстым.

    Улічваючы, што тэгі html заўсёды змяшчаюцца ў вуглавыя дужкі, вы можаце знайсці іх з дапамогай аднаго з наступных рэгулярных выразаў.

    Адмоўлены клас:

    Шаблон : ]*>

    Тут мы супастаўляем адкрываючую вуглавую дужку, за якой ідзе нуль ці больш выпадкаў любога сімвала, акрамя зачыняючая вуглавая дужка [^>]* да бліжэйшай зачыняючай вуглавой дужкі.

    Лянівы пошук:

    Шаблон :

    Тут мы супадаем што заўгодна, ад першай адкрываючай дужкі да першай зачыняючай дужкі. Знак пытання прымушае .* адпавядаць як мінімум сімваламрадок.

    Каб апрацаваць усе радкі як адзін радок:

    Агульны шаблон : char(.

    Майкл Браўн - адданы энтузіяст тэхналогій, які любіць спрашчэнне складаных працэсаў з дапамогай праграмных інструментаў. Маючы больш чым дзесяцігадовы досвед працы ў індустрыі тэхналогій, ён удасканальваў свае навыкі ў Microsoft Excel і Outlook, а таксама ў Google Sheets і Docs. Блог Майкла прысвечаны таму, каб падзяліцца сваімі ведамі і вопытам з іншымі, даючы простыя ў выкананні парады і падручнікі для павышэння прадукцыйнасці і эфектыўнасці. Незалежна ад таго, з'яўляецеся вы дасведчаным прафесіяналам або пачаткоўцам, блог Майкла прапануе каштоўную інфармацыю і практычныя парады, каб атрымаць максімальную аддачу ад гэтых неабходных праграмных інструментаў.