0

已经为此苦苦挣扎了几个小时...

我有以下正则表达式:

(?<=\bdata-video-id=""."">)(.*?)(title=.*?>)

以下输入:

         <div class="cameras">            
            <table class="results">
                <colgroup>
                    <col class="col0">
                    <col class="col1">
                </colgroup>
                <thead>
                    <tr>
                        <th title="Name">
                            Name
                        </th>
                        <th title="Date">
                            Date
                        </th>
                    </tr>
                </thead>
                <tbody>
                    <tr data-video-id="1">
                        <td title="149 - Cam123">
                            149 - Cam123
                        </td>
                        <td title="Feb 18 2013">
                            Feb 18 2013
                        </td>
                    </tr>
                    <tr data-video-id="2">
                        <td title="150 - Cam456">
                            150 - Cam456
                        </td>
                        <td title="Feb 18 2013">
                            Feb 18 2013
                        </td>
                    </tr>                   
                </tbody>
            </table>
        </div>

正则表达式输出:

<td title="149 - Cam123">
<td title="150 - Cam456">

但我想得到的是每个表格行中第一个单元格的 title 属性的内容:

149 - Cam123
150 - Cam456

行数可能明显不同,但列数是固定的。请帮我微调上面的正则表达式。谢谢

注意:解决方案必须是正则表达式。我无权访问代码库,因此无法使用 HTML 解析器或任何其他类型的代码干预。我可以挂接到应用程序的唯一方法是注入不同的正则表达式。

4

1 回答 1

0

基于它必须是正则表达式的 OP 要求,那么我的建议是在内部标题信息中添加一个组包装器:

(?<=\bdata-video-id=""."">).*?title="(.*?)">

否则,一般的解决方案是不使用正则表达式:

你为什么使用正则表达式?由于标签的复杂性,典型的解决方案是使用 HTML 解析器

这是关于此主题的 SO

这是Jeff Atwood 在这篇博文中指出的另一个更流行的关于使用 XHTML 的正则表达式的回应

于 2013-02-20T15:58:21.767 回答