53
The way in which we use word() is by passing it a string, together with a start position
of the rst word to extract, and an end position of the last word to extract. By default, the
separator sep used between words is a single space.
Let’s see some examples:
# some sentence
change = c("Be the change""you want t to o be")
# extract first word
word(change, 1)
## [1] "Be" "you"
# extract second word
word(change, 2)
## [1] "the" "want"
# extract last word
word(change, -1)
## [1] "change" "be"
# extract all but the first words
word(change, 2, , -1)
## [1] "the change" "want to be"
stringr has more functions but we’ll discuss them in chapter 6 since they have to do with
regular expressions.
CC BY-NC-SA 3.0 GastonSanchez
Handling and Processing Strings in R
Convert pdf file to powerpoint online - software SDK project:C# Create PDF from PowerPoint Library to convert pptx, ppt to PDF in C#.net, ASP.NET MVC, WinForms, WPF
Online C# Tutorial for Creating PDF from Microsoft PowerPoint Presentation
www.rasteredge.com
Convert pdf file to powerpoint online - software SDK project:VB.NET Create PDF from PowerPoint Library to convert pptx, ppt to PDF in vb.net, ASP.NET MVC, WinForms, WPF
VB.NET Tutorial for Export PDF file from Microsoft Office PowerPoint
www.rasteredge.com
54
CC BY-NC-SA 3.0 GastonSanchez
Handling and Processing Strings in R
software SDK project:Online Convert PowerPoint to PDF file. Best free online export
Online Powerpoint to PDF Converter. Download Free Trial. Convert a PPTX/PPT File to PDF. Just upload your file by clicking on the blue
www.rasteredge.com
software SDK project:C# HTML5 PDF Viewer SDK to convert and export PDF document to
Create PDF from PowerPoint. Create PDF from Tiff. Create PDF from Convert PDF to Png, Gif, Bitmap Images. File and Page Process. File: Merge, Append PDF Files. File
www.rasteredge.com
Chapter 5
Regular Expressions (part I)
So far we have seen some basic and intermediate functions for handling and working with
text in R. These are very useful functions and they allows us to do many interesting things.
However, if we truly want to unleash the power of strings manipulation, we need to take
things to the next level and talk about regular expressions.
Aregular expression (a.k.a. regex) is a special text string for describing a certain amount
of text. This \certain amount of text" receives the formal name of pattern. Hence we say
that a regular expression is a pattern that describes a set of strings.
Tools for working with regular expressions can be found in virtually all scripting languages
(e.g. Perl, Python, Java, Ruby, etc). R has some functions for working with regular ex-
pressions although it does not provide the wide range of capabilities that other scripting
languages do. Nevertheless, they can take us very far with some workarounds (and a bit of
patience).
Iam assuming that you already have been introduced to regex, so we won’t cover everything
there is to know about regular expressions. Instead, we will focus on how R works with
regular expressions, as well as the R syntax that you will have to use for regex operations.
To know more about regular expressions in general, you can nd some useful information in
the following resources:
 Regex wikipedia
http://en.wikipedia.org/wiki/Regular_expression
For those readers who have no experience with regular expressions, a good place to start
is by checking the wikipedia entrance.
 Regular-Expressions.info website (by Jan Goyvaerts)
http://www.regular-expressions.info
An excelent website full of information about regular expressions. It contains many dif-
ferent topics, resources, lots of examples, and tutorials, covered at both beginner and
55
software SDK project:VB.NET PDF - Convert PDF Online with VB.NET HTML5 PDF Viewer
Create PDF from Excel. Create PDF from PowerPoint. Create PDF to Text. Convert PDF to JPEG. Convert PDF to Png Images. File & Page Process. File: Merge, Append PDF
www.rasteredge.com
software SDK project:VB.NET PDF File Compress Library: Compress reduce PDF size in vb.
Convert smooth lines to curves. Detect and merge image fragments. Flatten visible layers. VB.NET Demo Code to Optimize An Exist PDF File in Visual C#.NET Project
www.rasteredge.com
56
advanced levels.
 Mastering Regular Expressions (by Jerey Friedl)
http://regex.info/book.html
Iwasn’t sure whether to include this reference but I think it deserves to be considered as
well. This is perhaps the authoritative book on regular expressions. The only issue is that
it is a book better adressed for readers already experienced with regex.
5.1 Regex Basics
The main purpose of working with regular expressions is to describe patterns that are used
to match against text strings. Simply put, working with regular expressions is nothing more
than pattern matching. The result of a match is either successful or not.
The simplest version of pattern matching is to search for one occurrence (or all occurrences)
of some specic characters in a string. For example, we might want to search for the word
"programming" in a large text document, or we might want to search for all occurrences of
the string "apply" in a series of les containing R scripts.
Typically, regular expression patterns consist of a combination of alphanumeric characters as
well as special characters. A regex pattern can be as simple as a single character, or it can
be formed by several characters with a more complex structure. In all cases we construct
regular expressions much in the same form in which we construct arithmetic expressions, by
using various operators to combine smaller expressions.
Among the various types of operators, their main use reduces to four basic operations for
creating regular expressions:
 Concatenation
 Logical OR
 Replication
 Grouping
The operations listed above can be considered to be the building blocks of regular expressions
operators. By combining them in several ways, we can represent very complicated and
sophisticated patterns. Here is a short description of each of them:
Concatenation The basic type of regular expression is formed by concatenating a set of
characters together, one after the other, like "abcd". This regex pattern matches only the
single string \abcd".
CC BY-NC-SA 3.0 GastonSanchez
Handling and Processing Strings in R
software SDK project:C# PDF File Split Library: Split, seperate PDF into multiple files
SharePoint. C#.NET control for splitting PDF file into two or multiple files online. Support to break a large PDF file into smaller files.
www.rasteredge.com
software SDK project:VB.NET PDF File Merge Library: Merge, append PDF files in vb.net
Merge Microsoft Office Word, Excel and PowerPoint data to PDF Append one PDF file to the end of another one in VB library download and VB.NET online source code
www.rasteredge.com
57
Logical OR
The logical operator OR, denoted by the vertical bar |, allows us to choose
from one ofseveral possibilities. Forexample, the regularexpression "ab|cd" matches exactly
two strings \ab" and \cd". With the logical operator we can specify many strings with a
single regular expression. For instance, if we are trying to nd among a bunch of documents,
those texts related to hydrology, we might look for words like \water", \ocean", \sea", \river"
and \lake". All those terms can be put together in the form of a regular expression such as
"water|ocean|sea|river|lake".
Repetition Another basic operation is that of repetition, which enables us to dene a
pattern that matches under multiple possibilities. More specically, this operation is carried
out using a series of regex operators, known as quantier, that repeat the preceding regular
expression a specied number of times.
Grouping The grouping operator, denoted with a expression inside parentheses ( ), en-
ables us to specify any number of other operators and characters as a unit. In other words,
agrouping sequence is a parenthesized expression that is treated as a unit. For example, if
we want to specify the set of strings X, XYX, XYXYX, XYXYXYX, and so forth, we must
write "(XY)*X" to indicate that the \XY" pattern must be replicated together.
5.2 Regular Expressions in R
There are two main aspects that we need to consider about regular expressions in R. One
has to do with the functions designed for regex pattern matching. The other aspect has to
do with the way regex patterns are expressed in R. In this section we are going to talk about
the latter issue: the way R works with regular expressions. I nd more convenient to rst
cover the specicities of R around regex operations, before discussing the functions and how
to interact with regex patterns.
5.2.1 Regex syntax details in R
Most of the regex manipulations that we would use in other scripting languages work in the
same way in R. But not everything. Some regex elements and patterns require a specic
synthax in R which we need to describe.
To know more about the specications and technicalities of regular expressions as used in R,
you should see the help pages: help(regex) or help(regexp) (or alternatively ?regex).
CC BY-NC-SA 3.0 GastonSanchez
Handling and Processing Strings in R
software SDK project:C# PDF Convert to Jpeg SDK: Convert PDF to JPEG images in C#.net
NET library to batch convert PDF files to High quality jpeg file can be exported from PDF in Turn multiple pages PDF into single jpg files respectively online.
www.rasteredge.com
software SDK project:XDoc.HTML5 Viewer for .NET, Zero Footprint AJAX Document Image
View, Convert, Edit, Sign Documents and Images. Choose file display mode. We are dedicated to provide powerful & profession imaging controls, PDF document, image
www.rasteredge.com
58
# to know more about regular expressions in R
help(regex)
The help documentation about regular expressions contains a lot of technical information.
Depending on your level of regex expertise, you may nd the provided information very
useful or simply criptic. But don’t expect to nd any examples. The help content is just for
reference with no practical demos on R. With respect to this book, we will cover the following
topics in the next subsections:
 metacharacters
 quanitiers
 sequences
 character classes
 POSIX character classes
5.2.2 Metacharacters
The simplest form of regular expressions are those that match a single character. Most
characters, including all letters and digits, are regular expressions that match themselves.
For example, the pattern "1" matches the number 1. The pattern "=" matches the equal
symbol. The pattern "blu" matches the set of letters \blu". However, there are some
special characters that have a reserved status and they are known as metacharacters. The
metacharacters in Extended Regular Expressions (EREs) are:
. \ | ( ) [ { $ * + ?
For example, the pattern "money$" does not match \money$". Likewise, the pattern "what?"
does not match \what?". Except for a few cases, metacharacters have a special meaning and
purporse when working with regular expressions.
Normally |outside R|, when we want to represent any of the metacharacters with its literal
meaning in a regex pattern, we need to escape them with a backslash n. In R, however, we
need to escape them with a double backslash nn. The following table shows the general regex
metacharacters and how to escape them in R:
CC BY-NC-SA 3.0 GastonSanchez
Handling and Processing Strings in R
59
Metacharacters and how to escape them in R
Metacharacter Literal meaning
Escape in R
.
the period or dot
nn.
$
the dollar sign
nn$
*
the asterisk or star
nn*
+
the plus sign
nn+
?
the question mark
nn?
|
the vertical bar or pipe symbol
nn|
n
the backslash
nnnn
^
the caret
nn^
[
the opening square bracket
nn[
]
the closing square bracket
nn]
f
the opening curly bracket
nnf
g
the closing curly bracket
nng
(
the opening round bracket
nn(
)
the closing round bracket
nn)
For instance, consider the character string "$money". Say we wanted to replace the dollar
sign $ with an empty string "". This can be done with the function sub(). The naive (but
wrong) way is to simply try to match the dollar sign with the character "$":
# string
money = "$money"
# the naive but wrong way
sub(pattern = "$", replacement t = "", x x = money)
## [1] "$money"
As you can see, nothing happened. In most scripting languages, when we want to represent
any of the metacharacters with its literal meaning in a regex, we need to escape them with
abackslash. The problem with R is that the traditional way doesn’t work (you will get a
nasty error):
# the usual (in other languages) yet wrong way in R
sub(pattern = "n$", replacement t = "", x x = = money)
In R we need to scape metacharacters with a double backslash. This is how we would
eectively replace the $ sign:
# the right way in R
sub(pattern = "nn$", replacement t = "", x x = = money)
## [1] "money"
CC BY-NC-SA 3.0 GastonSanchez
Handling and Processing Strings in R
60
Here are some silly examples that show how to escape metacharacters in R in order to be
replaced with an empty "":
# dollar
sub("nn$""""$Peace-Love")
## [1] "Peace-Love"
# dot
sub("nn.""""Peace.Love")
## [1] "PeaceLove"
# plus
sub("nn+""""Peace+Love")
## [1] "PeaceLove"
# caret
sub("nn^""""Peace^Love")
## [1] "PeaceLove"
# vertical bar
sub("nn|""""Peace|Love")
## [1] "PeaceLove"
# opening round bracket
sub("nn(""""Peace(Love)")
## [1] "PeaceLove)"
# closing round bracket
sub("nn)""""Peace(Love)")
## [1] "Peace(Love"
# opening square bracket
sub("nn[""""Peace[Love]")
## [1] "PeaceLove]"
# closing square bracket
sub("nn]""""Peace[Love]")
## [1] "Peace[Love"
# opening curly bracket
sub("nnf""""PeacefLoveg")
CC BY-NC-SA 3.0 GastonSanchez
Handling and Processing Strings in R
61
## [1] "PeaceLove}"
# closing curly bracket
sub("nng""""PeacefLoveg")
## [1] "Peace{Love"
# double backslash
sub("nnnn""""PeacennLove")
## [1] "PeaceLove"
5.2.3 Sequences
Sequences dene, no surprinsingly, sequences of characters which can match. We have short-
hand versions (or anchors) for commonly used sequences in R:
Anchor Sequences in R
Anchor Description
nnd
match a digit character
nnD
match a non-digit character
nns
match a space character
nnS
match a non-space character
nnw
match a word character
nnW
match a non-word character
nnb
match a word boundary
nnB
match a non-(word boundary)
nnh
match a horizontal space
nnH
match a non-horizontal space
nnv
match a vertical space
nnV
match a non-vertical space
Let’s see an application of the anchor sequences with some examples around substitution
operations. Substitutions can be performed with the functions sub() and gsub(). Although
we’ll discuss the replacements functions later in this chapter, it is important to keep in mind
their dierence. sub() replaces the rst match, while gsub() replaces all the matches.
Let’s consider the string "the dandelion war 2010", and let’s check the dierent substition
eects of replacing each anchor sequence with an underscore "
".
Digits and non-digits
CC BY-NC-SA 3.0 GastonSanchez
Handling and Processing Strings in R
62
# replace digit with  _
sub("nnd""_""the dandelion war r 2010")
## [1] "the dandelion war _010"
gsub("nnd""_""the dandelion war 2010")
## [1] "the dandelion war ____"
# replace non-digit with  _
sub("nnD""_""the dandelion war r 2010")
## [1] "_he dandelion war 2010"
gsub("nnD""_""the dandelion war 2010")
## [1] "__________________2010"
Spaces and non-spaces
# replace space with  _
sub("nns""_""the dandelion war r 2010")
## [1] "the_dandelion war 2010"
gsub("nns""_""the dandelion war 2010")
## [1] "the_dandelion_war_2010"
# replace non-space with  _
sub("nnS""_""the dandelion war r 2010")
## [1] "_he dandelion war 2010"
gsub("nnS""_""the dandelion war 2010")
## [1] "___ _________ ___ ____"
Words and non-words
# replace word with  _
sub("nnb""_""the dandelion war r 2010")
## [1] "_the dandelion war 2010"
gsub("nnb""_""the dandelion war 2010")
## [1] "_t_h_e_ _d_a_n_d_e_l_i_o_n_ _w_a_r_ _2_0_1_0_"
CC BY-NC-SA 3.0 GastonSanchez
Handling and Processing Strings in R
Documents you may be interested
Documents you may be interested