用锚文本

时间:2017-01-08 03:43:03

标签: regex vim sed

我只想在锚点HTML代码中用空格替换短划线,如下所示:

<a href="https://example.com/hello-world-hi">hello-world-hi</a>

替换后将是:

<a href="https://example.com/hello-world-hi">hello world hi</a>

如何告诉正则表达式只是替换锚文本中的破折号?

3 个答案:

答案 0 :(得分:1)

  1. 直观地选择该标签的内容:

    vit
    
  2. 对视觉选择所涵盖的文字执行替换:

    :s/\%V-\%V/ /g
    

答案 1 :(得分:1)

您仍然可以使用替换来执行此操作:

private class MenuListener implements ActionListener
    {
        public void actionPerformed(ActionEvent event)
        {
            if( event.getSource() == openMenuItem )
            {
                Panel panel = new Panel(); //I don't know where you get your panel data from so I create a new one
                panel.setInstructions(new JTextArea("I'm a text area and I have instructions")); //set the JTextArea value

                System.out.println(panel.getInstructions().getText()); //test print to show how you can get the JTextArea text
            }
        }
    }

答案 2 :(得分:0)

您不应该尝试使用正则表达式解析HTML,而是使用解析器。

对于命令行处理,有HTML-XML-utils(包含许多Linux发行版)及其hxpipehxunpipe命令,这些命令将HTML转换为可通过基于行进行处理的格式工具和背部:

$ echo '<a href="https://example.com/hello-world-hi">hello-world-hi</a>' | hxpipe
Ahref CDATA https://example.com/hello-world-hi
(a
-hello-world-hi
)a
-\n

现在,我们可以修改它,例如使用GNU sed(>是辅助提示符):

$ echo '<a href="https://example.com/hello-world-hi">hello-world-hi</a>' |
> hxpipe |
> sed '/^(a$/,/^)a$)/{/^-/s/-/ /2g}'
Ahref CDATA https://example.com/hello-world hi
(a
-hello world hi
)a
-\n

sed命令,更具可读性和评论性:

sed '
    /^(a$/,/^)a$)/{   # If we are within an anchor tag...
        /^-/s/-/ /2g  # If the line starts with "-" (text), replace all but the
    }                 #   first hyphen with a space
'

hxpipe通过以-开头的行来表示文字,因此我们会替换除之外的所有连字符s///2g的行为是GNU sed特定的,对其他seds可能有不同的作用。

最后,我们&#34;取消&#34;回到HTML:

$ echo '<a href="https://example.com/hello-world-hi">hello-world-hi</a>' |
> hxpipe |
> sed '/^(a$/,/^)a$)/{/^-/s/-/ /2g}' |
> hxunpipe
<a href="https://example.com/hello-world hi">hello world hi</a>