Reputation: 21
So i have a text like below:
"Speaker 1: dasjkdasldasn Speaker 2: sadjasdkasd Speaker 1: sjdakldak Speak 2: sjdlaksdlsak Speaker 1: sjdaskd. "
What are some functions that i could use to start a new line whenever a new speaker is speaking? The final outcome should be
"Speaker 1: dasjkdasldasn
Speaker 2: sadjasdkasd
Speaker 1: sjdakldak
Speak 2: sjdlaksdlsak
Speaker 1: sjdaskd."
Upvotes: 0
Views: 106
Reputation: 388982
Using str_replace_all
from stringr
. Taking the string s
from @ThomasIsCoding
cat(stringr::str_replace_all(s, '(Speak)', '\n\\1'))
#Speaker 1: dasjkdasldasn
#Speaker 2: sadjasdkasd
#Speaker 1: sjdakldak
#Speak 2: sjdlaksdlsak
#Speaker 1: sjdaskd.
Upvotes: 0
Reputation: 2767
It depends on how closely you want to match the initial keywords. You can adjust the regular expression to be more or less strict.
strsplit(s,'\\s+(?=Speak(er)? \\d+:)',perl=TRUE)
Upvotes: 0
Reputation: 101518
If you always has keyword like Speak*
, maybe we can try
cat(gsub("\\s(Speak.*?)","\n\\1",s),"\n")
such that
> cat(gsub("\\s(Speak.*?)","\n\\1",s),"\n")
Speaker 1: dasjkdasldasn
Speaker 2: sadjasdkasd
Speaker 1: sjdakldak
Speak 2: sjdlaksdlsak
Speaker 1: sjdaskd.
Data
s <- "Speaker 1: dasjkdasldasn Speaker 2: sadjasdkasd Speaker 1: sjdakldak Speak 2: sjdlaksdlsak Speaker 1: sjdaskd. "
Upvotes: 1
Reputation: 887148
We can create the newline with gsub
and print with cat
cat(gsub("\\s(\\w+\\s+\\d+:)", "\n\\1", str1, perl = TRUE), '\n')
#Speaker 1: dasjkdasldasn
#Speaker 2: sadjasdkasd
#Speaker 1: sjdakldak
#Speak 2: sjdlaksdlsak
#Speaker 1: sjdaskd.
Or after inserting the newline, read it with read.table
read.table(text = gsub("\\s(\\w+\\s+\\d+:)", "\n\\1", str1), header = FALSE, sep=",")
# V1
#1 Speaker 1: dasjkdasldasn
#2 Speaker 2: sadjasdkasd
#3 Speaker 1: sjdakldak
#4 Speak 2: sjdlaksdlsak
#5 Speaker 1: sjdaskd.
str1 <- "Speaker 1: dasjkdasldasn Speaker 2: sadjasdkasd Speaker 1: sjdakldak Speak 2: sjdlaksdlsak Speaker 1: sjdaskd. "
Upvotes: 2