2016-11-27 2 views
2

Ich versuche, Klammern um bestimmte Buchtitel Zeichenfolgen hinzuzufügen, und ich möchte in der Lage sein, mit der paste0 Funktion einzufügen. Ich möchte diese Zeichenfolge nehmen:Textbearbeitung in R

a <- c("I Like What I Know 1959 02e pdfDrama (amazon.com)", "My Liffe 1993 07e pdfDrama (amazon.com)") 

Wrap bestimmte Zeichenfolgen in Klammern:

a 
[1] “I Like What I Know (1959) (02e) (pdfDrama) (amazon.com)” 
[2] ”My Life (1993) (07e) (pdfDrama) (amazon.com)” 

Ich habe versucht, aber kann nicht einen Weg finden, um sie innerhalb der Zeichenfolge zu ersetzen:

paste0("(",str_extract(a, "\\d{4}"),")") 
paste0("(",str_extract(a, ”[0-9]+.e”),”)”) 

Hilfe?

+1

Was ist die Regel? Suchen Sie das vierstellige Wort und umschließen Sie alle nachfolgenden Wörter mit Klammern? –

Antwort

1

kann ich einen regulären Ausdruck für eine feste Anzahl von Wörtern spezifischer Art vorschlagen:

a <- c("I Like What I Know 1959 02e pdfDrama (amazon.com)","My Life 1993 07e pdfDrama (amazon.com)") 
sub("\\b(\\d{4})(\\s+)(\\d+e)(\\s+)([a-zA-Z]+)(\\s+\\([^()]*\\))", "(\\1)\\2(\\3)\\4(\\5)\\6", a) 

die R demo

Siehe Und hier ist die regex demo. Kurz gesagt,

  • \\b(\\d{4}) - einfängt 4 Ziffern als ganzes Wort in Gruppe 1
  • (\\s+) - Gruppe 2: eine oder mehr Leerzeichen
  • (\\d+e) - Gruppe 3: eine oder mehr Ziffern und e
  • (\\s+) - Gruppe 4: ibid
  • ([a-zA-Z]+) - Gruppe 5: eine oder mehr Buchstaben
  • (\\s+\\([^()]*\\)) - Gruppe 6: eine oder mehr Weißräume, (, null oder mehr andere Zeichen als ( und ), ).

Die Inhalte der Gruppen werden mit Hilfe von Rückverweisen wieder in das Ergebnis eingefügt.

Wenn es mehr Worte, und Sie müssen Wörter wickeln mit einem Buchstaben/Ziffer beginnt/unterstreichen nach einer 4-stelligen Wort in der Zeichenfolge verwenden

gsub("(?:(?=\\b\\d{4}\\b)|\\G(?!\\A))\\s*\\K\\b(\\S+)", "(\\1)", a, perl=TRUE) 

Siehe R demo und ein regex demo

Einzelheiten:

  • (?:(?=\\b\\d{4}\\b)|\\G(?!\\A)) - entweder die Lage vor einer 4-stelligen ganzen Wel d (siehe die positive Vorgriffs-(?=\\b\\d{4}\\b)) oder das Ende der vorherigen erfolgreichen Übereinstimmung
  • \\s* - 0+ Leerzeichen
  • \\K - Weglassen der Text abgestimmt bisher
  • \\b(\\S+) - Gruppe 1 Erfassen 1 oder mehr Nicht-Leerzeichen Symbole denen eine Wortgrenze vorangestellt ist.
Verwandte Themen