仅在R中的sth之间更改表达式的正则表达式
我有一些概括的句子仅在R中的sth之间更改表达式的正则表达式,r,regex,R,Regex,我有一些概括的句子 \r\n sth ~ sth\r\nsth ~ sth ~ \r\n 我要做的只是将\r\n设置为与“” 所以结果是 \r\n sth ~ sthsth ~ sth ~ \r\n 如果我使用正则表达式 gsub("\\S\r\n\\S","\\S\\S",string) 然后结果是(示例为滚动石头) 是否有任何方法可以保留字符串: \r\n sth ~ rollingstones ~ sth ~ \r\n 我需要一个通用的解决方案,将另一个\r\n保留\r\n 感谢您
\r\n sth ~ sth\r\nsth ~ sth ~ \r\n
我要做的只是将\r\n设置为与“”
所以结果是
\r\n sth ~ sthsth ~ sth ~ \r\n
如果我使用正则表达式
gsub("\\S\r\n\\S","\\S\\S",string)
然后结果是(示例为滚动石头)
是否有任何方法可以保留字符串:
\r\n sth ~ rollingstones ~ sth ~ \r\n
我需要一个通用的解决方案,将另一个\r\n保留\r\n
感谢您的阅读。我们可以使用正向先行和后向正则表达式:
string <- '\r\n sth ~ sth\r\nsth ~ sth ~ \r\n'
gsub("(?<=\\S)\r\n(?=\\S)","",string, perl = TRUE)
#[1] "\r\n sth ~ sthsth ~ sth ~ \r\n"
这将只从字符串中删除
'/r/n'
,该字符串后面没有空格,保持非空格字符不变 您可以使用\\b
代替\\S
:
gsub("\\b\r\n\\b", "", "\r\n sth ~ sth\r\nsth ~ sth ~ \r\n")
#[1] "\r\n sth ~ sthsth ~ sth ~ \r\n"
或者使用gsub(\\S\r\n\\S,“\\S\\S”,string)来接近您可能想要的内容
您可以将
gsub
与双反向引用一起使用:
gsub("(sth)\r\n(sth)", "\\1\\2", string)
#[1] "\r\n sth ~ sthsth ~ sth ~ \r\n"
\\1
捕获第一个捕获组,即(sth)
\\2
捕获第二个捕获组,即(第二个)(sth)
谢谢您的回复。这确实对我的回复很有帮助,但请理解我只能给你们中的一个人打绿色复选标记。感谢给我直观的解释,但请理解我只能在系统中选择一个回复。你的回答也帮了我很大的忙。
gsub("\\b\r\n\\b", "", "\r\n sth ~ sth\r\nsth ~ sth ~ \r\n")
#[1] "\r\n sth ~ sthsth ~ sth ~ \r\n"
gsub("(\\S)\r\n(\\S)", "\\1\\2", "\r\n sth ~ sth\r\nsth ~ sth ~ \r\n")
#[1] "\r\n sth ~ sthsth ~ sth ~ \r\n"
gsub("(sth)\r\n(sth)", "\\1\\2", string)
#[1] "\r\n sth ~ sthsth ~ sth ~ \r\n"