如何使用Regex在HTML标记之间提取数据?

时间:2011-11-05 06:26:05

标签: regex

我在课堂上被分配了一些sed作业,距离完成作业只有一步之遥。我试图想出一个解决方案,但我没有做任何事情,直到我即将放弃。

基本上,在我得到的文件中...我应该替换它:

<b>Some text here...each bold tag has different content...</b>

Some text here...each bold tag has different content...

我已经部分完成了,但我无法弄清楚如何使用sed(regexp)“回显”提取的内容。

我设法将内容替换得很好,但是当我试图实际输出HTML标签之间的内容时,它就出错了。

如果这令人困惑,我真的很抱歉。我现在已经在这个项目上工作了几个小时而且有点沮丧。基本上,为什么这不起作用?

s/<b>.*<\/b>/.*/g

我只想输出没有粗体标签的内容。

非常感谢!

3 个答案:

答案 0 :(得分:1)

您需要使用捕获组,它们是括号()

所以,就是这样:

s/<b>(.*)<\/b>/\1/g

捕获组从左到右编号,从1开始,然后增加。

此语法是执行正则表达式的标准方法; sed的语法略有不同。 sed命令是

sed 's/<b>\(.*\)<\/b>/\1/g' [file]

sed -r 's/<b>(.*)<\/b>/\1/g' [file]

当然,如果您只想删除粗体标签,另一种解决方案就是用空白替换HTML标签

sed 's/<\([^>]\|\(\"[^\"]\"\)\)*>//g' [file]

(我不喜欢sed需要逃避一切)

s/<([^\]|(\"[^\"]\"))*>//g

答案 1 :(得分:1)

如果要在替换中引用正则表达式匹配的一部分,则需要将正则表达式的该部分放入捕获组,然后使用前面带反斜杠的组编号引用它。请尝试以下方法:

s/<b>\(.*\)</b>/\1/g

答案 2 :(得分:-1)

我认为这个问题应该针对SED的问题。像这样:http://www.grymoire.com/Unix/Sed.html#uh-4