Sök…


Introduktion

sub och gsub används för att redigera strängar med mönster. Se Mönstermatchning och ersättning för mer information om relaterade funktioner och vanliga uttryck för hur man bygger ett mönster.

Ordna karaktärssträngar med hjälp av fångstgrupper

Om du vill ändra ordningen på en teckensträng kan du använda parenteser i pattern att gruppera delar av strängen. Dessa grupper kan i replacement läggas till med hjälp av på varandra följande nummer.

Följande exempel visar hur du kan omordna en vektor med namn i formen "efternamn, förnamn" till en vektor med formen "förnamn efternamn".

library(randomNames) 
set.seed(1)

strings <- randomNames(5)
strings
# [1] "Sigg, Zachary"        "Holt, Jake"           "Ortega, Sandra"       "De La Torre, Nichole"
# [5] "Perkins, Donovon"  

sub("^(.+),\\s(.+)$", "\\2 \\1", strings)
# [1] "Zachary Sigg"        "Jake Holt"           "Sandra Ortega"       "Nichole De La Torre"
# [5] "Donovon Perkins"    

Om du bara behöver efternamnet kan du bara adressera de första parparenteserna.

sub("^(.+),\\s(.+)", "\\1", strings)
# [1] "Sigg"        "Holt"        "Ortega"      "De La Torre" "Perkins"  

Eliminera duplicerade element i följd

Låt oss säga att vi vill eliminera duplicerat efterföljande element från en sträng (det kan vara mer än ett). Till exempel:

2,14,14,14,19

och konvertera det till:

2,14,19

Med gsub kan vi uppnå det:

gsub("(\\d+)(,\\1)+","\\1", "2,14,14,14,19")
[1] "2,14,19"

Det fungerar också för mer än en annan upprepning, till exempel:

 > gsub("(\\d+)(,\\1)+", "\\1", "2,14,14,14,19,19,20,21")
[1] "2,14,19,20,21"

Låt oss förklara det reguljära uttrycket:

  1. (\\d+) : En grupp 1 avgränsad av () och hittar valfri siffra (minst en). Kom ihåg att vi måste använda det dubbla backslashet ( \\ ) här för en teckenvariabel representerar ett backslash speciellt flyktecken för bokstavliga strängavgränsare ( \" eller \' ). \d\ motsvarar: [0-9] .
  2. , : Ett skiljetecken Tecken: , (vi kan inkludera utrymmen eller någon annan avgränsare)
  3. \\1 : En identisk sträng till gruppen 1, dvs: det upprepade antalet. Om det inte händer matchar mönstret inte.

Låt oss försöka en liknande situation: eliminera i följd upprepade ord:

one,two,two,three,four,four,five,six

Sedan ersätter du bara \d med \w , där \w matchar alla ordtecken, inklusive: valfri bokstav, siffra eller understreck. Det motsvarar [a-zA-Z0-9_] :

> gsub("(\\w+)(,\\1)+", "\\1", "one,two,two,three,four,four,five,six")
[1] "one,two,three,four,five,six"
> 

Sedan inkluderar ovanstående mönster som ett visst fall duplicerade siffrorfall.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow