我有以下字符串:
string = "asflkjsdhlkjsdhglk<body>Iwant\to+extr@ctth!sstr|ng<body>sdgdfsghsghsgh"
我想提取两个
<body>
标签之间的字符串。我要找的结果是:substring = "<body>Iwant\to+extr@ctth!sstr|ng<body>"
请注意,两个
<body>
标签之间的子字符串可以包含字母、数字、标点符号和特殊字符。有没有简单的方法来做到这一点?
regmatches(string, regexpr('<body>.+<body>', string))
perl=TRUE
标志。 - Matthew Plourderegex = '<body>.+?<body>'
.+?
),这样它就不会尽可能地匹配更多的 <body>
标签。regex = '(<body>.+?<body>)'
使用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"
我相信Matthew和Steve的答案都是可以接受的。这里有另一个解决方案:
string = "asflkjsdhlkjsdhglk<body>Iwant\to+extr@ctth!sstr|ng<body>sdgdfsghsghsgh"
regmatches(string, regexpr('<body>.+<body>', string))
output = sub(".*(<body>.+<body>).*", "\\1", string)
print (output)
<body>[\S\s]*<body>
。 - user557597