Სარჩევი
გსურთ უფსკრულის დამუშავება ყველაზე ეფექტური გზით? გამოიყენეთ რეგულარული გამონათქვამები უჯრედში ყველა სივრცის ამოსაშლელად, შეცვალეთ მრავალი სივრცე ერთი სიმბოლოთი, ამოაჭრით სივრცეები მხოლოდ რიცხვებს შორის და სხვა.
რომელ მონაცემებსაც იყენებთ, ძნელად შეხვდებით მონაცემთა ნაკრები სივრცეების გარეშე. უმეტეს შემთხვევაში, თეთრი სივრცე კარგია - თქვენ იყენებთ მას ვიზუალურად გამოყოფთ სხვადასხვა ინფორმაციას, რათა გაადვილოთ აღქმა. თუმცა, ზოგიერთ სიტუაციაში, ეს შეიძლება გახდეს ბოროტი - ზედმეტი სივრცეები შეიძლება გააფუჭოს თქვენი ფორმულები და თქვენი სამუშაო ფურცლები თითქმის უმართავი გახადოს.
რატომ გამოვიყენოთ რეგულარული გამოხატულება Excel-ში უფსკრულის შესამცირებლად?
სანამ არ ჩავუღრმავდეთ ჩვეულებრივი გამონათქვამების გამოყენებას Excel-ის სამუშაო ფურცლებში უფსკრულის ამოსაღებად, მსურს მივმართო იმ კითხვას, რომელიც პირველ რიგში მახსენდება - რატომ გვჭირდება რეგექსები, როდესაც Excel-ს უკვე აქვს TRIM ფუნქცია?
განსხვავების გასაგებად, ვნახოთ, რა ითვლება თეთრ სივრცეში თითოეულ შემთხვევაში:
- ჩაშენებულ TRIM ფუნქციას შეუძლია მხოლოდ space სიმბოლოს ამოღება რომელსაც აქვს მნიშვნელობა 32 7-ბიტიან ASCII სისტემაში.
- რეგულარულ გამონათქვამებს შეუძლიათ იდენტიფიცირონ ცარიელი სივრცის რამდენიმე განსხვავებული ფორმა, როგორიცაა space ( ), tab (\t), carriage return (\r) და ახალი. ხაზი (\n). გარდა ამისა, არის სივრცის სიმბოლო (\s), რომელიც ემთხვევა ყველა ამ ტიპს და ძალიან სასარგებლოა ნედლი შეყვანის გასასუფთავებლადმონაცემები.
ზუსტად იცოდეთ რა ხდება კულისებში, ბევრად უფრო ადვილია გამოსავლის გამომუშავება, არა?
როგორ ჩართოთ რეგულარული გამონათქვამები Excel-ში
საყოველთაოდ ცნობილი ფაქტია, რომ ექსელი არ უჭერს მხარს რეგულარულ გამონათქვამებს. მათ გასააქტიურებლად, თქვენ უნდა შექმნათ მორგებული VBA ფუნქცია. საბედნიეროდ, ჩვენ უკვე გვაქვს ერთი, სახელად RegExpReplace . მოიცადეთ, რატომ "ჩანაცვლება" სანამ ჩვენ ვსაუბრობთ ამოღებაზე? Excel-ის ენაზე, "ამოღება" არის კიდევ ერთი სიტყვა "ჩანაცვლება ცარიელი სტრიქონით" :)
ფუნქციის დასამატებლად თქვენს Excel-ში, უბრალოდ დააკოპირეთ მისი კოდი ამ გვერდიდან, ჩასვით VBA რედაქტორში. და შეინახეთ თქვენი ფაილი მაკრო ჩართული სამუშაო წიგნად (.xlsm).
აქ არის ფუნქციის სინტაქსი თქვენი მითითებისთვის:
RegExpReplace(ტექსტი, ნიმუში, ჩანაცვლება, [მაგალითის_რიცხვი] , [შემთხვევა_შემთხვევა])პირველი სამი არგუმენტი აუცილებელია, ბოლო ორი არჩევითი.
სად:
- ტექსტი - ორიგინალური სტრიქონი ძიებაში.
- ნიმუში - რეგექსი მოსაძებნად.
- ჩანაცვლება - ტექსტი, რომლითაც უნდა შეიცვალოს. წაშალეთ თეთრი სივრცეები , თქვენ დააყენეთ ეს არგუმენტი:
- ცარიელი სტრიქონი ("") აბსოლუტურად ყველა ინტერვალის ამოსაჭრელად
- space სიმბოლო (" ") მრავალი სივრცის ჩანაცვლებისთვის ერთი ინტერვალის სიმბოლოთი
- მაგალითის_რიცხვი (სურვილისამებრ) - ინსტანციის ნომერი. უმეტეს შემთხვევაში, თქვენ გამოტოვებთ მას ყველა ინსტანციის ჩანაცვლებისთვის(ნაგულისხმევი).
- შემთხვევა_შემთხვევა (არასავალდებულო) - ლოგიკური მნიშვნელობა, რომელიც მიუთითებს შეესაბამებოდეს (TRUE) თუ იგნორირებას (FALSE) ტექსტის ასოებით. უფსკრულისთვის ის შეუსაბამოა და, შესაბამისად, გამოტოვებული.
დამატებითი ინფორმაციისთვის იხილეთ RegExpReplace ფუნქცია.
როგორ ამოიღოთ სივრცე regex-ით - მაგალითები
RegExpReplace ფუნქცია დაემატა თქვენს სამუშაო წიგნს. მოდით, სათითაოდ გადავხედოთ სხვადასხვა სცენარებს.
ამოშალეთ ყველა უფსკრული regex-ის გამოყენებით
სტრიქონში ყველა სივრცის ამოსაშლელად, თქვენ უბრალოდ მოძებნეთ ნებისმიერი სივრცის სიმბოლო, მათ შორის ინტერვალი, ჩანართი, კარის დაბრუნება და ხაზის მიწოდება და ჩაანაცვლეთ ისინი ცარიელი სტრიქონით ("").
ნიმუში : \s+
ჩანაცვლება : ""
თუ ვივარაუდებთ, რომ წყაროს სტრიქონი A5-შია, B5-ში ფორმულა არის:
=RegExpReplace(A5, "\s+", "")
რათა გაგიადვილოთ თქვენი შაბლონების მართვა , შეგიძლიათ შეიყვანოთ რეგექსი წინასწარ განსაზღვრულ უჯრედში და მიაწოდოთ იგი ფორმულას აბსოლუტური მითითების გამოყენებით, როგორიცაა $A$2, ასე რომ უჯრედის მისამართი უცვლელი დარჩება ფორმულის სვეტში კოპირებისას.
=RegExpReplace(A5, $A$2, "")
წაშალეთ ერთზე მეტი უფსკრული
დამატებითი სივრცის ამოსაშლელად (ანუ მეტი n ერთი თანმიმდევრული სივრცე), გამოიყენეთ იგივე რეგექსი \s+, მაგრამ შეცვალეთ ნაპოვნი შესატყვისები ერთი ინტერვალის სიმბოლოთი.
ნიმუში : \s+
ჩანაცვლება : " "
=RegExpReplace(A5, "\s+", " ")
გთხოვთ, მიაქციოთ ყურადღება, რომ ეს ფორმულა ინახავს ერთ ინტერვალს არა მხოლოდ შორისმონაცემთა ნაკრების ქვემოთ, დავუშვათ, რომ გსურთ ამოჭრათ ყველა წამყვანი/შემდგომი სივრცე და ყველა, ერთის გარდა, შორის სივრცეები, უცვლელი დარჩეს მრავალი ხაზი. ამოცანის შესასრულებლად დაგჭირდებათ ორი განსხვავებული RegExpReplace ფუნქცია.
პირველი ფუნქცია ცვლის მრავალ სივრცეს ერთი ინტერვალის სიმბოლოთი.
=RegExpReplace(A5, " +", " ")
მეორე აშორებს სივრცეებს. სტრიქონის დასაწყისიდან და ბოლოდან:
=RegExpReplace(A5, "^ +| +$", "")
უბრალოდ ჩადეთ ორი ფუნქცია ერთმანეთში:
=RegExpReplace(RegExpReplace(A5, " +", " "), "^ +| +$", "")
და თქვენ მიიღებთ სრულყოფილი შედეგი:
Regex ჩაანაცვლებს რამდენიმე სივრცეს ერთი სიმბოლოთი
თუ გსურთ ამოიღოთ ყველა სივრცე სტრიქონიდან და შეცვალოთ თანმიმდევრული სივრცეების თითოეული ჯგუფი კონკრეტული სიმბოლოთი, ეს არის ის, რაც თქვენ უნდა გააკეთოთ:
პირველ რიგში, გამოიყენეთ ეს რეგექსი წინა და უკანა უფსკრულის მოსაჭრელად:
=RegExpReplace(A8, "^[\s]+|[\s]+$", "")
შემდეგ, შეასრულეთ ზემოთ მოცემული ფუნქცია სხვა RegExpReplace-ის text არგუმენტზე, რომელიც ანაცვლებს ერთ ან მეტ თანმიმდევრულ სივრცეს თქვენ მიერ მითითებული სიმბოლოთი, მაგ. დეფისი:
ნიმუში : \s+
ჩანაცვლება : -
ვივარაუდოთ, რომ წყაროს სტრიქონი არის A8-ში, ფორმულა იღებს ამ ფორმას:
=RegExpReplace(RegExpReplace(A8, "^[\s]+|[\s]+$", ""), "\s+", "-")
ან შეგიძლიათ შეიყვანოთ შაბლონები და ჩანაცვლება ცალკეულ უჯრედებში, როგორც ნაჩვენებია ეკრანის სურათზე:
Regex ცარიელი ხაზების ამოსაღებად
აქ არის შეკითხვა, რომელსაც ხშირად სვამენ მომხმარებლები, რომლებსაც აქვთ რამდენიმე ხაზი ერთ უჯრედში: "ჩემს უჯრედებში ბევრი ცარიელი ხაზია. არსებობს რაიმე გზა ამის მისაღებადგაათავისუფლეთ ისინი, გარდა თითოეული უჯრედის გავლისა და თითოეული ხაზის ხელით წაშლისა?" პასუხი: ეს მარტივია!
ცარიელ ხაზების შედარება, რომლებსაც არ აქვთ ერთი სიმბოლო, მიმდინარე ხაზის დასაწყისიდან ^-მდე შემდეგი ხაზი \n, რეგექსი არის:
ნიმუში : ^\n
თუ თქვენი ვიზუალურად ცარიელი სტრიქონები შეიცავს სივრცეებს ან ჩანართებს, გამოიყენეთ ეს რეგულარული გამოხატულება:
ნიმუში : ^[\t ]*\n
უბრალოდ შეცვალეთ რეგექსი ცარიელი სტრიქონით ამ ფორმულის გამოყენებით და ყველა ცარიელი ხაზი ერთდროულად გაქრება!
=RegExpReplace(A5, $A$2, "")
ღია სივრცის ამოღება RegEx Tools-ით
ზემოხსენებულმა მაგალითებმა აჩვენა რეგექსების მიერ მოწოდებული შესანიშნავი შესაძლებლობების მხოლოდ მცირე ნაწილი. სამწუხაროდ, ყველა არა კლასიკური რეგულარული გამონათქვამების ფუნქციები ხელმისაწვდომია VBA-ში.
საბედნიეროდ, ჩვენს Ultimate Suite-ში შეტანილი RegEx ინსტრუმენტები თავისუფალია ამ შეზღუდვებისგან, რადგან ისინი მუშავდება Microsoft-ის .NET RegEx ძრავით. ეს საშუალებას გაძლევთ შექმნათ უფრო დახვეწილი შაბლონები, რომლებიც არ არის მხარდაჭერილი VBA RegExp. Belo-ს მიერ w თქვენ იპოვით ასეთი რეგულარული გამოხატვის მაგალითს.
Regex ციფრებს შორის მანძილის მოსაშორებლად
ალფაციფრულ სტრიქონში, დავუშვათ, რომ გსურთ ამოიღოთ უფსკრული მხოლოდ რიცხვებს შორის, ასე რომ, სტრიქონი, როგორიცაა "A 1 2 B" ხდება "A 12 B".
ნებისმიერ ორ ციფრს შორის ცარიელი სივრცის შესატყვისად, შეგიძლიათ გამოიყენოთ შემდეგი მიმოხილვა:
ნიმუში : (?<=\d)\s+(?=\d)
ფორმულაზე დაფუძნებული შესაქმნელადზემოხსენებულ რეგექსებზე, აქ არის ორი მარტივი ნაბიჯის შესრულება:
- Ablebits Data ჩანართზე, Text ჯგუფში დააწკაპუნეთ Regex ინსტრუმენტები .
- Regex Tools პანელზე აირჩიეთ წყაროს მონაცემები, შეიყვანეთ თქვენი რეგექსი, აირჩიეთ წაშლა ვარიანტი და დააჭირეთ წაშლა .
იმისათვის, რომ მიიღოთ შედეგები ფორმულებად და არა მნიშვნელობებად, არ დაგავიწყდეთ ჩანიშვნა ფორმულად ჩასმა მოსანიშნი ველში.
მომენტში ნახავთ AblebitsRegexRemove ფუნქციას, რომელიც ჩასმულია ახალ სვეტში ორიგინალური მონაცემების მარჯვნივ.
ალტერნატიულად, შეგიძლიათ შეიყვანოთ რეგექსი ზოგიერთ უჯრედში. ვთქვათ A5 და ჩადეთ ფორმულა პირდაპირ უჯრედში ფუნქციის ჩასმა დიალოგური ფანჯრის გამოყენებით, სადაც AblebitsRegexRemove კატეგორიზებულია AblebitsUDFs .
ვინაიდან ეს ფუნქცია სპეციალურად შექმნილია სტრიქონების ამოსაღებად, მას სჭირდება მხოლოდ ორი არგუმენტი - შეყვანის სტრიქონი და რეგექსი:
=AblebitsRegexRemove(A5, $A$2)
აი, როგორ ამოიღოთ სივრცეები Excel რეგულარული გამონათქვამების გამოყენებით. მადლობას გიხდით, რომ კითხულობთ და მოუთმენლად ველი თქვენს ნახვას ჩვენს ბლოგზე მომავალ კვირას!
ხელმისაწვდომი ჩამოტვირთვები
წაშალეთ უფსკრული regex-ით - მაგალითები (ფაილი .xlsm)
Ultimate Suite - საცდელი ვერსია (.exe ფაილი)
სიტყვები, არამედ სტრიქონის დასაწყისში და ბოლოს, რაც არ არის კარგი. წამყვანი და უკანა სივრცის თავიდან ასაცილებლად, ჩადეთ ზემოთ მოცემული ფორმულა სხვა RegExpReplace ფუნქციაში, რომელიც აშორებს სივრცეებს თავიდან და ბოლოდან: =RegExpReplace(RegExpReplace(A5, "\s+", " "), "^[\s]+|[\s]+$", "")
Regex to წაშალეთ წამყვანი და უკანა სივრცე
სტრიქონის დასაწყისში ან ბოლოს შორისის მოსაძებნად გამოიყენეთ დასაწყისი ^ და დასასრული $ წამყვანები.
წამყვანი ცარიელი სივრცე:
ნიმუში : ^[\s]+
უკანასკნელი უფსკრული:
ნიმუში : [\s ]+$
წამყვანი და უკანასკნელი უფსკრული:
ნიმუში : ^[\s]+