正则表达式删除两个标签之间的字符串的一部分

时间:2018-12-28 10:58:25

标签: regex

假设我有一个像这样的字符串:

"Hello this something <tag=blah blah>some more text here doesnt matter </tag>else" 

如何从给定的字符串中获取以下文本:

“你好,别的东西”

现在我结束了这个正则表达式:

(?<=<tag)(.*)(?=<\/tag>)

但是它不起作用。帮助吗?

4 个答案:

答案 0 :(得分:1)

(.*)<tag.*<\/tag>(.*)

这将使您可以将第一个捕获组和第二个捕获组组合到要查找的字符串中。

如果您是在替换(“删除”)中间部分之后,则可以使用以下模式:

<tag.*?\/tag>

您所追求的字符串将保留下来。

https://regex101.com/确实是一个很好的环境,可以测试模式并进行分析。

答案 1 :(得分:0)

由于您还想删除标签,因此标签不要处于先行和后备状态。

如果要匹配要删除的部分,我只需使用:

<tag(.*)<\/tag>

此外,这可能就是为什么它不返回任何结果的原因,因为根据口味的不同,可能不支持先行和后行。

但是,如果您想获取文字内容,可以使用:

(.*)<tag.*<\/tag>(.*)

,您将在第1组和第2组中找到文本。

答案 2 :(得分:0)

另一个选项是Regex.Replace。这是一个c#示例:

string input = "Hello this something <tag=blah blah>some more text here doesnt matter </tag>else";
System.Text.RegularExpressions.Regex.Replace(input, @"<tag.*?\/tag>", string.Empty)

这是文档的link

答案 3 :(得分:0)

R中的解决方案:

test <- "Hello this something <tag=blah blah>some more text here doesnt matter </tag>else"
# use function gsub(): 
gsub("<tag.*?/tag.*?>", "", test, perl=T) 
[1] "Hello this something else"