[R] Using regex to truncate repeating characters

Marc Schwartz
2015-11-11T15:06:50Z

> On Nov 11, 2015, at 3:02 AM, Karl <josip.2000 at gmail.com> wrote:
>
> Hi all,
>
> I'm trying to learn how to use regex inside R. I'm far from an
expert when
> it comes to this, but google is my friend when it comes to finding suitable
> pieces of syntax to start building from. For example, this post seems to do
> what I want:
>
>
http://stackoverflow.com/questions/12258622/regular-expression-to-check-for-repeating-characters
> However, how do I implement this in R? gsub()?
> For example, with Perl-style regex, are there syntax modifications that
> need to be done before it will work with R?
>
> My task is that I want to truncate/limit repeated characters to 3. If I
> have the string:
> "Looooorem ipsum dolor sit ammmmmmet, consectetur adipiscing
eliiiiiiiit"
>
> I want to truncate it to:
> "Looorem ipsum dolor sit ammmet, consectetur adipiscing eliiit"
>
> Thank you!
>
> BR,
> Josip


Hi,

Not extensively tested, but something like this should work:

text <- "Looooorem ipsum dolor sit ammmmmmet, consectetur adipiscing
eliiiiiiiit"

> gsub("([[:alnum:]])\\1{3,}", "\\1\\1\\1", text)
[1] "Looorem ipsum dolor sit ammmet, consectetur adipiscing eliiit"


The regex is looking for any alphanumeric character as a group, which is
represented by:

  ([[:alnum:]])

That is followed by a backreference:

  \\1{3,}

which says find repeated characters in the prior alphanumeric character group of
at least 3 repeats and return just the unique character.

The returned expression:

  \\1\\1\\1

says repeat the unique character 3 times.

See ?gsub and ?regex for some additional information.


Regards,

Marc Schwartz