Excel бағдарламасындағы белгілі бір таңбаларды немесе мәтінді жою үшін Regex

  • Мұны Бөлісіңіз
Michael Brown
аргумент алынып тасталды, барлық табылған сәйкестіктер жойылады. Белгілі бір сәйкестікті жою үшін дана нөмірін анықтаңыз.

Төмендегі жолдарда бірінші реттік нөмірді жойғыңыз келеді делік. Барлық осындай сандар хэш белгісінен (#) басталып, дәл 5 цифрдан тұрады. Сонымен, біз оларды мына регекс арқылы анықтай аламыз:

Үлгі : #\d{5}\b

\b сөзінің шекарасы сәйкес келетін ішкі жолдың болмайтынын көрсетеді. #10000001 сияқты үлкенірек жолдың бөлігі.

Барлық сәйкестіктерді жою үшін дана_саны аргументі анықталмаған:

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

Тек бірінші ретті жою үшін дана_саны аргументін 1-ге орнатамыз:

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

Регекс белгілі бір таңбаларды жою үшін

Жолдан белгілі бір таңбаларды алып тастау үшін барлық қажетсіз таңбаларды жазып, оларды тік жолақпен бөліңіз.VBA RegExp шектеулері жоқ синтаксис және екіншіден, жұмыс кітаптарыңызға кез келген VBA кодын енгізуді қажет етпейді, өйткені барлық кодты біріктіруді біз серверде орындаймыз.

Тапсырманың бөлігі тұрақты өрнекті құру және оны функцияға қызмет етіңіз :) Мұны қалай істеу керектігін практикалық мысалда көрсетуге рұқсат етіңіз.

Жақшадағы және жақшадағы мәтінді regex көмегімен жою әдісі

Ұзын мәтін жолдарында маңыздылығы аз ақпарат жиі [жақшаға] және (жақшаға) алынады. Барлық басқа деректерді сақтай отырып, осы маңызды емес мәліметтерді қалай жоюға болады?

Шын мәнінде, біз html тегтерін, яғни бұрыштық жақшалардағы мәтінді жоюға арналған ұқсас регексті жасап қойғанбыз. Дәл осындай әдістер шаршы және дөңгелек жақшалар үшін де жұмыс істейтіні анық.

Үлгі : (\(.*?\))

Егер біреу оның құралдар жинағын тұрақты өрнектермен байыта алатын болса, Excel бағдарламасы қаншалықты қуатты болатынын ойладыңыз ба? Біз тек ойланып қана қоймай, жұмыс жасадық :) Ал енді сіз өзіңіздің жұмыс кітаптарыңызға осы тамаша RegEx функциясын қосып, үлгіге сәйкес келетін ішкі жолдарды тез арада өшіре аласыз!

Өткен аптада біз қарадық. Excel бағдарламасында жолдарды ауыстыру үшін тұрақты өрнектерді пайдалану жолы. Ол үшін біз реттелетін Regex Replace функциясын жасадық. Белгілі болғандай, функция өзінің негізгі қолданысынан асып түседі және жолдарды ауыстырып қана қоймай, оларды жоя алады. Бұл қалай болуы мүмкін? Excel тұрғысынан мәнді жою оны бос жолмен ауыстырудан басқа ештеңе емес, бұл біздің Regex функциямыз өте жақсы!

Excel бағдарламасындағы ішкі жолдарды жоюға арналған VBA RegExp функциясы

Барлығымыз білетіндей, Excel бағдарламасында әдепкі бойынша тұрақты өрнектерге қолдау көрсетілмейді. Оларды қосу үшін сіз өзіңіздің пайдаланушы анықтайтын функцияңызды жасауыңыз керек. Жақсы жаңалық, мұндай функция қазірдің өзінде жазылған, тексерілген және пайдалануға дайын. Бар болғаны осы кодты көшіріп, оны VBA өңдегішіне қою, содан кейін файлды макрос қосылған жұмыс кітабы (.xlsm) ретінде сақтау.

Функцияда мыналар бар: келесі синтаксис:

RegExpReplace(мәтін, үлгі, ауыстыру, [дана_нөмірі], [сәйкестік_регистрі])

Алғашқы үш аргумент қажет, соңғы екеуі міндетті емес.

Мұнда:

  • Мәтін - іздеуге арналған мәтін жолыол жабу жақшасын тапқанша мүмкін.

Қай үлгіні таңдасаңыз да, нәтиже мүлдем бірдей болады.

Мысалы, A5 форматындағы жолдан барлық html тегтерін жою және мәтінді қалдыру үшін, формула:

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

Немесе скриншотта көрсетілгендей жалқау кванфикаторды пайдалануға болады:

Бұл шешім жалғыз мәтін (5 - 9 жолдар). Бірнеше мәтіндер үшін (10 - 12 жолдар) нәтижелер күмәнді - әртүрлі тегтердің мәтіндері біреуіне біріктіріледі. Бұл дұрыс па, жоқ па? Мен қорқамын, бұл оңай шешілетін нәрсе емес - бәрі сіздің қалаған нәтижені түсінуіңізге байланысты. Мысалы, В11-де «А1» нәтижесі күтіледі; B10 нұсқасында "деректер1" және "деректер2" бос орынмен бөлінгенін қалауыңыз мүмкін.

HTML тегтерін жою және қалған мәтіндерді бос орындармен бөлу үшін мына жолмен әрекет етуге болады:

  1. Тегтерді бос жолдармен емес, бос орындармен " " ауыстырыңыз:

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

  2. Бір бос орын таңбасына бірнеше бос орындарды азайтыңыз:

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

  3. Алдыңғы және кейінгі бос орындарды кесу:

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

Нәтиже келесідей болады:

Ablebits Regex Remove Tool

Егер сізде Excel бағдарламасына арналған Ultimate Suite қолданбасын пайдалану мүмкіндігі болса, сіз соңғы шығарылыммен бірге енгізілген жаңа Regex құралдарын бұрыннан тапқан боларсыз. Бұл .NET негізіндегі Regex функцияларының сұлулығы, олар біріншіден, толық мүмкіндікті тұрақты өрнекті қолдайды Жою опциясын таңдап, Жою түймесін басыңыз.

Нәтижелерді мәндер емес, формулалар ретінде алу үшін Формула ретінде кірістіру құсбелгісін қойыңыз.

A2:A5 жолындағы жақшадағы мәтінді жою үшін біз параметрлерді конфигурациялаймыз төмендегідей:

Нәтижесінде AblebitsRegexRemove функциясы бастапқы деректеріңіздің жанындағы жаңа бағанға кірістіріледі.

Функцияны стандартты Функцияны кірістіру тілқатысу терезесі арқылы ұяшыққа тікелей енгізуге болады, мұнда ол AblebitsUDFs астында санатталған.

AblebitsRegexRemove мәтінді жоюға арналғандықтан, ол тек екі аргументті қажет етеді - бастапқы жол және regex. Екі параметрді тікелей формулада анықтауға немесе ұяшық сілтемелері түрінде беруге болады. Қажет болса, бұл реттелетін функцияны кез келген жергілікті функциялармен бірге пайдалануға болады.

Мысалы, алынған жолдардағы қосымша бос орындарды кесу үшін TRIM функциясын орауыш ретінде пайдалануға болады:

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

Міне, Excel бағдарламасында тұрақты өрнектерді пайдаланып жолдарды жою әдісі. Оқығаныңыз үшін алғыс айтамын және сізді келесі аптада біздің блогта күтемін!

Қолжетімді жүктеп алулар

Регекс мысалдары (.xlsm файлы) арқылы жолдарды жою

Ultimate Suite - сынақ нұсқасы (.exe файлы)

в.
  • Үлгі - ізделетін тұрақты өрнек.
  • Ауыстыру - ауыстырылатын мәтін. Үлгіге сәйкес келетін ішкі жолдарды жою үшін ауыстыру үшін бос жолды ("") пайдаланыңыз.
  • Дана_нөмірі (қосымша) - дананы ауыстырыңыз. Өткізілмесе, барлық табылған сәйкестіктер ауыстырылады (әдепкі).
  • Сәйкестік_регі (міндетті емес) - мәтін регистрін сәйкестендіру немесе елемеу керектігін көрсететін логикалық мән. Регистрді ескере отырып сәйкестендіру үшін TRUE (әдепкі) мәнін пайдаланыңыз; регистрді ескермейтіндер үшін - ЖАЛҒАН.
  • Қосымша ақпарат алу үшін RegExpReplace функциясын қараңыз.

    Кеңес. Қарапайым жағдайларда Excel формулалары арқылы ұяшықтардан белгілі бір таңбаларды немесе сөздерді жоюға болады. Бірақ тұрақты өрнектер бұл үшін әлдеқайда көп опцияларды ұсынады.

    Тұрақты өрнектерді пайдаланып жолдарды қалай жоюға болады - мысалдар

    Жоғарыда айтылғандай, үлгіге сәйкес мәтін бөліктерін жою үшін оларды ауыстыру керек. бос жолмен. Сонымен, жалпы формула келесі пішінді қабылдайды:

    RegExpReplace(мәтін, үлгі, "", [дана_саны], [сәйкестік_регистрі])

    Төмендегі мысалдар осы негізгі тұжырымдаманың әртүрлі іске асырылуын көрсетеді.

    Жою барлық сәйкестіктер немесе нақты сәйкестік

    RegExpReplace функциясы берілген регекске сәйкес келетін барлық ішкі жолдарды табуға арналған. Қайсысын жою керектігі дана_саны деп аталатын 4-ші қосымша аргумент арқылы бақыланады.

    Әдепкі мән "барлық сәйкестіктер" болып табылады - дана_саны болғанда.біріктіру операторы (&) және ОҢ, ОРТА және СОЛ сияқты мәтін функциялары.

    Мысалы, барлық телефон нөмірлерін (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 функциясын тұрақты өрнектерді пайдаланып жолдан сандарды алу жолы бөлімінде түсіндірілгендей пайдаланыңыз.

    Бос орыннан кейін барлығын жою үшін Regex

    Бос орыннан кейін барлығын өшіру үшін бос орын ( ) немесебірінші бос орынды табу үшін бос орын (\s) және одан кейінгі кез келген таңбаларды сәйкестендіру үшін .* таңбасы.

    Егер сізде қалыпты бос орындар ғана бар бір жолды жолдар болса (7-биттік ASCII жүйесінде 32 мән) , төмендегі регекстердің қайсысын пайдаланатыныңыз маңызды емес. Көп жолды жолдар болған жағдайда, ол өзгереді.

    Барлығын жою үшін бос орын таңбасынан , мына регексті пайдаланыңыз:

    Үлгі : " .*"

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

    Бұл формула әр жолдағы бірінші бос орыннан кейінгі кез келген нәрсені алып тастайды. Нәтижелердің дұрыс көрсетілуі үшін Мәтінді орау мүмкіндігін қосуды ұмытпаңыз.

    Барлық бос орыннан (бос орын, қойынды, каретка қайтару және жаңа жолды қоса) өшіру үшін regex бұл:

    Үлгі : \s.*

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

    Себебі \s бос орындардың бірнеше түріне сәйкес келеді, соның ішінде жаңа жол (\n), бұл формула ұяшықта қанша жол болса да, бірінші бос орыннан кейін барлығын жояды.

    Нақтыдан кейін мәтінді жоюға арналған регекс. таңба

    Алдыңғы мысалдағы әдістерді пайдалана отырып, сіз көрсеткен кез келген таңбадан кейін мәтінді жоюға болады.

    Әр жолды бөлек өңдеу үшін:

    Жалпы үлгі : char.*

    Бір жолды жолдарда бұл char -ден кейін барлығын жояды. Көп жолды жолдарда әрбір жол жеке өңделеді, себебі VBA Regex дәмінде нүкте (.) жаңадан басқа кез келген таңбаға сәйкес келеді.жолдың басы ^ болса, біз нөлдік немесе одан да көп бос орынсыз [^ ]* таңбаларын сәйкестендіреміз, олардан кейін бірден бір немесе бірнеше бос орын « +». Соңғы бөлік нәтижелерде ықтимал алдыңғы бос орындарды болдырмау үшін қосылады.

    Әр жолдағы бірінші бос орын алдындағы мәтінді жою үшін формула әдепкі "барлық сәйкестіктер" режимінде жазылады ( дана_нөмірі жіберілген):

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

    Бірінші жолдағы бірінші бос орын алдындағы мәтінді жою және барлық басқа жолдарды өзгеріссіз қалдыру үшін дана_саны аргументі 1 мәніне орнатылады:

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

    Таңбадан бұрын барлығын жою үшін регекс

    Нақты таңба алдындағы барлық мәтінді жоюдың ең оңай жолы - регексті пайдалану келесідей:

    Жалпы үлгі : ^[^char]*char

    Адам тіліне аударылғанда, ол былай дейді: « ^ арқылы бекітілген жолдың басынан , char бірінші пайда болғанға дейін char [^char]* қоспағанда 0 немесе одан көп таңбаны сәйкестендіріңіз.

    Мысалы, бірінші қос нүктенің алдындағы барлық мәтінді жою үшін , мына тұрақты өрнекті пайдаланыңыз:

    Үлгі : ^[^:]*:

    Нәтижелерде алдыңғы бос орындарды болдырмау үшін, бос орынға \s* таңбасын қосыңыз. Бұл барлығын жояды g бірінші қос нүктенің алдында және одан кейінгі бос орындарды кесіңіз:

    Үлгі : ^[^:]*:\s*

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

    Кеңес. Тұрақты өрнектерден басқа, Excel бағдарламасында мәтінді орын немесе сәйкестік бойынша жоюға арналған өз құралдары бар. Тапсырманы төл формулалармен орындауды үйрену үшін,Excel бағдарламасындағы таңбаның алдындағы немесе кейінгі мәтінді қалай жою керектігін қараңыз.

    Регекс

    Сақтағыңыз келетіндерден басқа жолдағы барлық таңбаларды жою үшін жоққа шығарылған таңбалар сыныптарын пайдаланыңыз.

    Мысалы, кіші әріптерден басқа барлық таңбаларды жою үшін және нүктелер, регекс:

    Үлгі : [^a-z\.]+

    Шын мәнінде, біз мұнда + кванфикаторынсыз жасай аламыз, өйткені біздің функция барлығын ауыстырады сәйкестіктер табылды. Квантор оны сәл жылдамдатады - әрбір жеке таңбаны өңдеудің орнына ішкі жолды ауыстырасыз.

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

    Excel бағдарламасындағы html тегтерін жою үшін Regex.

    Біріншіден, HTML қалыпты тіл емес екенін ескеру керек, сондықтан оны тұрақты өрнектер арқылы талдау ең жақсы әдіс емес. Яғни, регекстер деректер жиынын тазарту үшін ұяшықтарыңыздан тегтерді алып тастауға көмектесетіні сөзсіз.

    html тегтері әрқашан бұрыштық жақшалар ішінде орналастырылатынын ескере отырып, оларды келесі регекстердің бірін пайдаланып табуға болады.

    Жоқталған класс:

    Үлгі : ]*>

    Мұнда біз ашылатын бұрыш жақшасын сәйкестендіреміз, одан кейін нөл немесе одан басқа кез келген таңбадан басқа кез келген таңбаның қайталануы көрсетіледі. жабылатын бұрышты жақша [^>]* ең жақын жабылатын бұрыштық жақшаға дейін.

    Жалқау іздеу:

    Үлгі :

    Осы жерде сәйкестік. бірінші ашылатын жақшадан бірінші жабылатын жақшаға дейінгі кез келген нәрсе. Сұрақ белгісі .* мүмкіндігінше аз таңбаны сәйкестендіруге мәжбүр етедіжол.

    Барлық жолдарды бір жол ретінде өңдеу үшін:

    Жалпы үлгі : char(.

    Майкл Браун - бағдарламалық құралдарды пайдалана отырып, күрделі процестерді жеңілдетуге құмарлығы бар арнайы технология әуесқойы. Технологиялық индустрияда он жылдан астам тәжірибесі бар ол Microsoft Excel және Outlook, сондай-ақ Google Sheets және Docs бағдарламаларында өз дағдыларын жетілдірді. Майклдың блогы өз білімі мен тәжірибесін басқалармен бөлісуге, өнімділік пен тиімділікті арттыруға арналған оңай орындалатын кеңестер мен оқулықтар беруге арналған. Сіз тәжірибелі кәсіпқой болсаңыз да, жаңадан бастаушы болсаңыз да, Майклдың блогы осы маңызды бағдарламалық құралдарды барынша пайдалану үшін құнды түсініктер мен практикалық кеңестер ұсынады.