Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
仅在R中的sth之间更改表达式的正则表达式_R_Regex - Fatal编程技术网

仅在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"