Բովանդակություն
Ստորև նշված տողերում, ենթադրենք, որ ցանկանում եք ջնջել առաջին կարգի համարը: Բոլոր նման թվերը սկսվում են հեշ նշանով (#) և պարունակում են ուղիղ 5 նիշ։ Այսպիսով, մենք կարող ենք դրանք նույնականացնել՝ օգտագործելով այս ռեգեքսը.
Pattern : #\d{5}\b
Boundary \b բառը նշում է, որ համապատասխան ենթատողը չի կարող լինել. ավելի մեծ տողի մի մասը, ինչպիսին է #10000001:
Բոլոր համընկնումները հեռացնելու համար instance_num արգումենտը սահմանված չէ.
=RegExpReplace(A5, "#\d{5}\b", "")
Միայն առաջին դեպքը վերացնելու համար մենք instance_num արգումենտը սահմանեցինք 1:
=RegExpReplace(A5, "#\d{5}\b", "", 1)
Regex որոշ նիշեր հեռացնելու համար
Որոշակի նիշերը տողից հեռացնելու համար պարզապես գրեք բոլոր անցանկալի նիշերը և դրանք առանձնացրեք ուղղահայաց գծովVBA RegExp սահմանափակումներից զերծ շարահյուսություն, և երկրորդը, չի պահանջում ձեր աշխատանքային գրքույկներում որևէ VBA կոդ տեղադրել, քանի որ կոդերի ամբողջ ինտեգրումը կատարվում է մեր կողմից հետնամասում:
Ձեր աշխատանքի մասնիկը կանոնավոր արտահայտություն ստեղծելն է և ծառայել այն ֆունկցիային :) Թույլ տվեք ցույց տալ, թե ինչպես դա անել գործնական օրինակով:
Ինչպես հեռացնել փակագծերում և փակագծերում տեքստը՝ օգտագործելով regex
Երկար տեքստային տողերում՝ քիչ կարևոր տեղեկատվություն հաճախ փակցված է [փակագծերում] և (փակագծերում): Ինչպե՞ս հեռացնել այդ անհամապատասխան մանրամասները՝ պահպանելով բոլոր մյուս տվյալները:
Իրականում, մենք արդեն ստեղծել ենք նմանատիպ ռեգեքս՝ html պիտակները ջնջելու համար, այսինքն՝ տեքստը անկյունային փակագծերում: Ակնհայտ է, որ նույն մեթոդները կաշխատեն նաև քառակուսի և կլոր փակագծերի դեպքում:
Նախշը .
Երբևէ մտածե՞լ եք, թե որքան հզոր կլինի Excel-ը, եթե ինչ-որ մեկը կարողանա հարստացնել իր գործիքակազմը կանոնավոր արտահայտություններով: Մենք ոչ միայն մտածել ենք, այլև աշխատել դրա վրա :) Եվ հիմա, դուք կարող եք ավելացնել այս հրաշալի RegEx ֆունկցիան ձեր սեփական աշխատանքային գրքույկներում և կարճ ժամանակում ջնջել օրինաչափությանը համապատասխան ենթատողերը:
Անցյալ շաբաթ մենք նայեցինք ինչպես օգտագործել կանոնավոր արտահայտություններ Excel-ում տողերը փոխարինելու համար: Դրա համար մենք ստեղծեցինք սովորական Regex Replace ֆունկցիա: Ինչպես պարզվեց, ֆունկցիան դուրս է գալիս իր հիմնական կիրառությունից և կարող է ոչ միայն փոխարինել տողերը, այլև հեռացնել դրանք: Ինչպե՞ս կարող էր դա լինել: Excel-ի առումով արժեքի հեռացումը ոչ այլ ինչ է, քան այն դատարկ տողով փոխարինելը, մի բան, որում մեր Regex ֆունկցիան շատ լավ է:
VBA RegExp ֆունկցիան Excel-ում ենթատողերը հեռացնելու համար
Ինչպես բոլորս գիտենք, Excel-ում սովորական արտահայտությունները լռելյայնորեն չեն աջակցվում: Դրանք միացնելու համար դուք պետք է ստեղծեք ձեր սեփական օգտատիրոջ կողմից սահմանված գործառույթը: Լավ նորությունն այն է, որ նման գործառույթն արդեն գրված է, փորձարկված և պատրաստ է օգտագործման: Պարզապես պետք է պատճենեք այս կոդը, տեղադրեք այն ձեր VBA խմբագրիչում և այնուհետև պահեք ձեր ֆայլը որպես մակրո-միացված աշխատանքային գրքույկ (.xlsm):
Ֆունկցիան ունի հետևյալ շարահյուսությունը՝
RegExpReplace(տեքստ, օրինաչափություն, փոխարինում, [instance_num], [match_case])Առաջին երեք արգումենտները պարտադիր են, վերջին երկուսը պարտադիր չեն:
Որտեղ՝
- Text - որոնման համար նախատեսված տեքստային տողըհնարավոր է այնքան ժամանակ, քանի դեռ չի գտնում փակող փակագիծը:
Որ օրինաչափությունն էլ ընտրեք, արդյունքը բացարձակապես նույնն է լինելու:
Օրինակ՝ հեռացնել բոլոր html պիտակները A5 տողից և թողնել տեքստը, բանաձևը հետևյալն է.
=RegExpReplace(A5, "]*>", "")
Կամ կարող եք օգտագործել ծույլ քանակականը, ինչպես ցույց է տրված սքրինշոթում.
Այս լուծումը հիանալի աշխատում է մեկ տեքստ (տողեր 5 - 9): Բազմաթիվ տեքստերի համար (10-12 տող) արդյունքները կասկածելի են՝ տարբեր թեգերից տեքստերը միաձուլվում են մեկի մեջ: Սա ճի՞շտ է, թե՞ ոչ։ Վախենում եմ, դա այն չէ, որ հեշտությամբ կարելի է որոշել, ամեն ինչ կախված է ցանկալի արդյունքի ձեր ըմբռնումից: Օրինակ, B11-ում ակնկալվում է «A1» արդյունքը. երբ B10-ում, դուք կարող եք ցանկանալ, որ «data1»-ը և «data2»-ն առանձնացվեն բացատով:
HTML պիտակները հեռացնելու և մնացած տեքստերը բացատներով առանձնացնելու համար կարող եք շարունակել հետևյալ կերպ. 30>
=TRIM(RegExpReplace(RegExpReplace(A5, "]*>", " "), " +", " "))
Արդյունքը նման կլինի հետևյալին.
Ablebits Regex Remove Tool
Եթե հնարավորություն եք ունեցել օգտագործելու մեր Ultimate Suite-ը Excel-ի համար, հավանաբար արդեն հայտնաբերել եք նոր Regex գործիքները, որոնք ներկայացվել են վերջին թողարկումով: .NET-ի վրա հիմնված Regex գործառույթների գեղեցկությունն այն է, որ նրանք, առաջին հերթին, աջակցում են լիարժեք կանոնավոր արտահայտություններին: Հեռացնել տարբերակը և սեղմել Հեռացնել :
Արդյունքները որպես բանաձևեր, այլ ոչ թե արժեքներ ստանալու համար ընտրեք Տեղադրեք որպես բանաձև վանդակը:
A2:A5 տողերից փակագծերում տեքստը հեռացնելու համար մենք կարգավորում ենք կարգավորումները: հետևյալ կերպ.
Արդյունքում AblebitsRegexRemove ֆունկցիան տեղադրվում է նոր սյունակում՝ ձեր սկզբնական տվյալների կողքին:
Ֆունկցիան կարող է նաև ուղղակիորեն մուտքագրվել բջիջում ստանդարտ Տեղադրել ֆունկցիան երկխոսության տուփի միջոցով, որտեղ այն դասակարգված է AblebitsUDFs ներքո:
Քանի որ AblebitsRegexRemove -ը նախատեսված է տեքստը հեռացնելու համար, այն պահանջում է ընդամենը երկու արգումենտ՝ սկզբնաղբյուրի տողը և ռեգեքսը: Երկու պարամետրերը կարող են ուղղակիորեն սահմանվել բանաձևով կամ տրամադրվել բջջային հղումների տեսքով: Անհրաժեշտության դեպքում, այս հատուկ գործառույթը կարող է օգտագործվել ցանկացած բնիկ գործառույթի հետ միասին:
Օրինակ, ստացված տողերում լրացուցիչ բացատները կտրելու համար կարող եք օգտագործել TRIM ֆունկցիան որպես փաթաթում.
=TRIM(AblebitsRegexRemove(A5, $A$2))
:
Այսպես կարելի է հեռացնել տողերը Excel-ում՝ օգտագործելով սովորական արտահայտություններ: Շնորհակալ եմ կարդալու համար և անհամբեր սպասում եմ ձեզ հաջորդ շաբաթ մեր բլոգում տեսնելու համար:
Հասանելի ներբեռնումներ
Հեռացրեք տողերը՝ օգտագործելով regex - օրինակներ (.xlsm ֆայլ)
Ultimate Suite - փորձնական տարբերակ (.exe ֆայլ)
in.Լրացուցիչ տեղեկությունների համար տե՛ս RegExpReplace ֆունկցիան:
Խորհուրդ: Պարզ դեպքերում, Excel-ի բանաձևերով կարող եք հեռացնել հատուկ նիշեր կամ բառեր բջիջներից: Բայց կանոնավոր արտահայտությունները դրա համար շատ ավելի շատ տարբերակներ են տալիս:
Ինչպես հեռացնել տողերը՝ օգտագործելով կանոնավոր արտահայտություններ - օրինակներ
Ինչպես նշվեց վերևում, օրինակին համապատասխանող տեքստի մասերը հեռացնելու համար դուք պետք է դրանք փոխարինեք: դատարկ թելով։ Այսպիսով, ընդհանուր բանաձևը ստանում է հետևյալ ձևը.
RegExpReplace(տեքստ, օրինակ, «», [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 ֆունկցիայի արդյունքն է:
Հեռացրեք հատուկ նիշերը regex-ի միջոցով
Մեր ձեռնարկներից մեկում, մենք նայեցինք, թե ինչպես հեռացնել անցանկալի նիշերը Excel-ում՝ օգտագործելով ներկառուցված և հատուկ գործառույթներ: Կանոնավոր արտահայտությունները շատ են հեշտացնում ամեն ինչ: Ջնջելու համար բոլոր նիշերը ցուցակագրելու փոխարեն, պարզապես նշեք նրանց, որոնք ցանկանում եք պահպանել :)
Նշման հիմքում ընկած է ժխտված նիշերի դասերը - նիշերի դասի ներսում դրվում է կարետ [^ ] համապատասխանելու ցանկացած նիշ, որը ՉԻ փակագծերում: + քանակականը ստիպում է նրան հաջորդական նիշերը դիտարկել որպես մեկ համընկնում, այնպես որ փոխարինումը կատարվի համապատասխան ենթատողի համար, այլ ոչ թե յուրաքանչյուր առանձին նիշի:
Կախված ձեր կարիքներից, ընտրեք հետևյալ ռեգեքսներից մեկը:
ոչ այբբենական նիշերը հեռացնելու համար, այսինքն՝ բոլոր նիշերը, բացի տառերից և թվերից. +
Բոլոր նիշերը բացի տառերից , նիշերից և բացատներից մաքրելու համար.
Նշան : [^0-9a-zA-Z ]+
Բոլոր նիշերը բացի տառերից , նիշերից և ընդգծում ջնջելու համար կարող եք օգտագործել \ W, որը նշանակում է ցանկացած նիշ, որը այբբենական նշան չէ կամընդգծում.
Նախշեր : \W+
Եթե ցանկանում եք պահել որոշ այլ նիշեր , օրինակ. Կետադրական նշանները դրեք փակագծերի մեջ:
Օրինակ՝ տառից, թվանշանից, կետից, ստորակետից կամ բացատից բացի որևէ այլ նիշ հանելու համար օգտագործեք հետևյալ ռեգեքսը.
Նախշը . [^0-9a-zA-Z\., ]+
Սա հաջողությամբ վերացնում է բոլոր հատուկ նիշերը, սակայն լրացուցիչ բացատ է մնում:
Սա շտկելու համար դուք կարող եք տեղադրել վերը նշված ֆունկցիան մեկ այլ ֆունկցիայի մեջ, որը փոխարինում է մի քանի բացատներ մեկ բացատ նիշով:
=RegExpReplace(RegExpReplace(A5,$A$2,""), " +", " ")
Կամ պարզապես օգտագործեք բնիկ TRIM ֆունկցիան նույն էֆեկտով: :
=TRIM(RegExpReplace(A5, $A$2, ""))
Regex՝ ոչ թվային նիշերը հեռացնելու համար
Տողից բոլոր ոչ թվային նիշերը ջնջելու համար կարող եք օգտագործել կա՛մ այս երկար բանաձևը, կա՛մ ներքևում թվարկված շատ պարզ ռեգեքսներից մեկը:
Համապատասխանեցրեք ցանկացած նիշ, որը թվանշան չէ.
Pattern : \D+
Հեռացրեք ոչ թվային նիշերը՝ օգտագործելով ժխտվող դասերը.
Նախշը : [^0-9]+
Նախշը : [^\d] +
Խորհուրդ. Եթե ձեր նպատակն է հեռացնել տեքստը և մնացած թվերը թափել առանձին բջիջների մեջ կամ տեղադրել դրանք բոլորը մեկ բջիջում՝ առանձնացված որոշակի սահմանազատիչով, ապա օգտագործեք RegExpExtract ֆունկցիան, ինչպես բացատրված է «Ինչպես հանել թվերը տողից՝ օգտագործելով կանոնավոր արտահայտություններ» բաժնում:
Regex՝ բացատից հետո ամեն ինչ հեռացնելու համար
Բացատից հետո ամեն ինչ ջնջելու համար օգտագործեք բացատ ( ) կամբացատ (\s) նիշ՝ առաջին բացատը գտնելու համար և .*՝ դրանից հետո ցանկացած նիշին համապատասխանելու համար:
Եթե ունեք մեկ տողով տողեր, որոնք պարունակում են միայն նորմալ բացատներ (արժեքը 32 7-բիթանոց ASCII համակարգում) , իրականում կարևոր չէ, թե ստորև նշված ռեգեքսներից որն եք օգտագործում: Բազմատող տողերի դեպքում դա իսկապես տարբերություն է:
Ամեն ինչ հեռացնելու համար բացատ նիշից հետո , օգտագործեք այս ռեգեքսը.
Pattern : " .*"
=RegExpReplace(A5, " .*", "")
Այս բանաձևը կհեռացնի ամեն ինչ յուրաքանչյուր տողում առաջին բացատից հետո: Որպեսզի արդյունքները ճիշտ ցուցադրվեն, համոզվեք, որ միացնեք Wrap Text-ը:
Ամեն ինչ բացատից հետո (ներառյալ բացատ, ներդիր, փոխադրման վերադարձ և նոր տող) հեռացնելու համար, ռեգեքսը է.
Նախշը : \s.*
=RegExpReplace(A5, "\s.*", "")
Որովհետև \s-ը համապատասխանում է մի քանի տարբեր բացատների տեսակների, ներառյալ նոր տողը (\n), այս բանաձևը ջնջում է ամեն ինչ բջջի առաջին բացատից հետո, անկախ նրանից, թե քանի տող կա դրա մեջ:
Ռեգեքս՝ որոշակի տեքստից հետո հեռացնելու համար: նիշ
Օգտագործելով նախորդ օրինակի մեթոդները, դուք կարող եք ջնջել տեքստը ձեր նշած ցանկացած նիշից հետո:
Յուրաքանչյուր տող առանձին մշակելու համար.
Ընդհանուր օրինակ ՝ char.*
Մեկ տող տողերում սա կհեռացնի ամեն ինչ char -ից հետո: Բազմատող տողերում յուրաքանչյուր տող կմշակվի առանձին, քանի որ VBA Regex-ի համով կետը (.) համապատասխանում է ցանկացած նիշի՝ բացառությամբ նորի:^ տողի սկիզբը, մենք համընկնում ենք զրոյական կամ ավելի ոչ բացատ նիշերի [^ ]*, որոնց անմիջապես հաջորդում է մեկ կամ մի քանի բացատ « +»: Վերջին մասը ավելացվում է արդյունքներում հնարավոր առաջատար բացատները կանխելու համար:
Տեքստը յուրաքանչյուր տողում առաջին բացատից առաջ հեռացնելու համար բանաձևը գրվում է լռելյայն «բոլոր համընկնում» ռեժիմում ( instance_num բաց թողնված).
=RegExpReplace(A5, "^[^ ]* +", "")
Տեքստը ջնջելու համար առաջին տողում առաջին բացատից առաջ և մնացած բոլոր տողերը անփոփոխ թողնելու համար, instance_num արգումենտը սահմանվում է 1:
=RegExpReplace(A5, "^[^ ]* +", "", 1)
Regex՝ ամեն ինչ նախքան նիշը հեռացնելու համար
Ողջ տեքստը որոշակի նիշից առաջ հեռացնելու ամենահեշտ ձևը ռեգեքսի օգտագործումն է։ այսպես.
Ընդհանուր օրինաչափություն : ^[^char]*char
Մարդկային լեզվով թարգմանված ասվում է. , համընկնում է 0 կամ ավելի նիշից, բացառությամբ char [^char]*-ի մինչև char -ի առաջին դեպքը։
Օրինակ՝ ջնջել ամբողջ տեքստը առաջին երկու կետից առաջ։ , օգտագործեք այս կանոնավոր արտահայտությունը.
Pattern : ^[^:]*:
Արդյունքներում առաջատար բացատներից խուսափելու համար ավելացրեք \s* բացատ նիշը: վերջ: Սա կհեռացնի ամեն ինչ g առաջին երկու կետից առաջ և կտրեք բոլոր բացատները անմիջապես դրանից հետո.
Նախշը .
Հուշում. Բացի սովորական արտահայտություններից, Excel-ն ունի տեքստը ըստ դիրքի կամ համընկնման հեռացնելու իր սեփական միջոցները: Սովորելու համար, թե ինչպես կատարել առաջադրանքը բնիկ բանաձևերով,խնդրում ենք տե՛ս Ինչպես հեռացնել տեքստը Excel-ում նիշից առաջ կամ հետո:
Regex՝ ամեն ինչ հեռացնելու համար, բացառությամբ
Տողից բոլոր նիշերը վերացնելու համար, բացառությամբ նրանց, որոնք ցանկանում եք պահել, օգտագործեք ժխտված նիշերի դասերը:
Օրինակ, բոլոր նիշերը, բացառությամբ փոքրատառերից հեռացնելու համար: և կետերը, ռեգեքսը հետևյալն է.
Pattern : [^a-z\.]+
Իրականում մենք կարող ենք անել առանց + քանակի այստեղ, քանի որ մեր ֆունկցիան փոխարինում է բոլորին: գտել են համընկնումներ: Քանակիչն այն մի փոքր ավելի արագ է դարձնում. յուրաքանչյուր առանձին նիշ մշակելու փոխարեն, դուք փոխարինում եք ենթատողը:
=RegExpReplace(A5, "[^a-z\.]+", "")
Regex Excel-ում html պիտակները հեռացնելու համար:
Նախ, պետք է նշել, որ HTML-ը կանոնավոր լեզու չէ, ուստի կանոնավոր արտահայտությունների միջոցով այն վերլուծելը լավագույն միջոցը չէ: Այնուամենայնիվ, ռեգեքսները կարող են միանշանակ օգնել հեռացնել պիտակները ձեր բջիջներից՝ ձեր տվյալների հավաքածուն ավելի մաքուր դարձնելու համար:
Հաշվի առնելով, որ html պիտակները միշտ տեղադրվում են անկյունային փակագծերում, դուք կարող եք դրանք գտնել՝ օգտագործելով հետևյալ ռեգեքսներից մեկը:
Ժխտված դաս.
Նշան : ]*>
Այստեղ մենք համընկնում ենք բացվող անկյունային փակագծով, որին հաջորդում է զրոյական կամ ավելի ցանկացած նիշի երևույթ, բացառությամբ փակման անկյունային փակագիծ [^>]* մինչև մոտակա փակման անկյան փակագիծը:
Անբան որոնում.
Pattern :
Ահա, մենք համընկնում ենք ամեն ինչ՝ սկսած առաջին բացման փակագծից մինչև առաջին փակման փակագիծը: Հարցական նշանը ստիպում է .*-ին համապատասխանեցնել այնքան քիչ նիշտող։
Բոլոր տողերը որպես մեկ տող մշակելու համար՝
Ընդհանուր օրինակ ՝ char(.