我有一个字符串,我想在其中删除紧跟着小写字母的换行符。例如,我的字符串可能包含:
一行文字\ r \ n另一行\ r \ nof text,
将显示为:
一行文字
另一行
的文字。
在这个例子中,我只想删除第二个换行符,然后读取文本:
一行文字
另一行文字
我知道模式是" \ r \ n [a-z]",所以代码应该像
gsub("\r\n[a-z]","")
但我无法提出在保留小写字母的同时删除换行符的代码。
谢谢!
答案 0 :(得分:2)
我们可以使用正则表达式外观
txtN <- gsub("\r\n(?=[a-z])", "", txt, perl = TRUE)
cat(txtN, sep="\n")
# one line of text
# another line of text,
答案 1 :(得分:2)
您可以在不使用外观的情况下实现所需,并使用TRE正则表达式
s <- "one line of text \r\n another line \r\nof text,"
res <- gsub("\r?\n([a-z])","\\1", s)
cat(res)
请参阅IDEONE demo
如果您在模式周围使用(...)
,则可以定义捕获组,您可以从替换模式中引用其中的内容。
模式详细信息:
\r?\n
- 换行符(\r\n
或\n
)([a-z])
- 第1组内的小写ASCII字母。替换:
\1
- 对第1组内容的编号反向引用。有关的更多信息:
P.S。:如果你热衷于使用PCRE正则表达式,除了前瞻性支持之外,还有一个非常好的构造 - 一个匹配任何样式换行符的\R
。然后,我建议:
gsub("\\R(?=[a-z])", "", txt, perl = TRUE)
答案 2 :(得分:1)
您需要使用positive lookahead
。
例如:
text = "one line of text \r\n another line \r\nof text,"
fixed = gsub("\r\n(?=[a-z])", "", text, perl = T)
cat(fixed)
#> one line of text
#> another line of text,