从字符串中提取两个单词之间的子字符串

May*_*you 7 regex string r substr

我有以下字符串:

string = "asflkjsdhlkjsdhglk<body>Iwant\to+extr@ctth!sstr|ng<body>sdgdfsghsghsgh"
Run Code Online (Sandbox Code Playgroud)

我想在两个<body>标签之间提取字符串.我要找的结果是:

substring = "<body>Iwant\to+extr@ctth!sstr|ng<body>"
Run Code Online (Sandbox Code Playgroud)

请注意,两个<body>标记之间的子字符串可以包含字母,数字,标点符号和特殊字符.

有这么简单的方法吗?谢谢!

Mat*_*rde 7

这是正则表达式方式:

regmatches(string, regexpr('<body>.+<body>', string))
Run Code Online (Sandbox Code Playgroud)


Ste*_* P. 6

regex = '<body>.+?<body>'
Run Code Online (Sandbox Code Playgroud)

您需要非贪婪(.+?),以便它不会将尽可能多的<body>标记分组.

如果您只使用没有辅助功能的正则表达式,那么您将需要一个捕获组来提取所需的内容,即:

regex = '(<body>.+?<body>)'
Run Code Online (Sandbox Code Playgroud)


Stu*_*Stu 2

strsplit() 应该可以帮助你:

>string = "asflkjsdhlkjsdhglk<body>Iwant\to+extr@ctth!sstr|ng<body>sdgdfsghsghsgh"
>x = strsplit(string, '<body>', fixed = FALSE, perl = FALSE, useBytes = FALSE)
[[1]]
[1] "asflkjsdhlkjsdhglk"         "Iwant\to+extr@ctth!sstr|ng" "sdgdfsghsghsgh"  
> x[[1]][2]
[1] "Iwant\to+extr@ctth!sstr|ng"
Run Code Online (Sandbox Code Playgroud)

当然,这会为您提供字符串的所有三个部分,并且不包括标签。