0

明白啦:

<TAG>something one</TAG><TAG>something two</TAG><TAG>something three</TAG>

我只想匹配:something two 我尝试:(?<=<TAG>)(.*two.*)(?=<\/TAG>) 但得到:

something one</TAG><TAG>something two</TAG><TAG>something three

也许我再举一个例子

RECORDsomething beetwenRECORD RECORDanything beetwenRECORD etc.

想听话beetwen RECORD

4

4 回答 4

0

如前所述,不鼓励使用正则表达式解析 HTML!有很多 HTML 解析器可以做到这一点。但是,如果您不惜一切代价想要一个正则表达式,这就是我在 Python 中的方式:

In [1]: import re

In [2]: s = '<TAG>something one</TAG><TAG>something two</TAG><TAG>something three</TAG>'

In [3]: re.findall(r'(?<=<TAG>).*?(?=</TAG>)', s)[1]
Out[3]: 'something two'

但是,此解决方案仅在您总是想提取第二个标签对的内容时才有效。但正如我所说,不要这样做。

于 2013-01-06T13:16:02.667 回答
0

您可以使用

<TAG>.+?<TAG>(.*?)</TAG>

something two在第一场比赛中$1

于 2013-01-06T12:57:35.430 回答
0

如果您知道 TAG 不是第一个也不是最后一个,您可以这样做

(?<=.+<TAG>)(.*two.*)(?=<\/TAG>.+)

当然,最好也捕获标签并使用捕获组

.*<TAG>(.*two.*?)<\/TAG>
于 2013-01-07T10:14:48.790 回答
0

尝试这个:

(?<=</TAG><TAG>)[^<]*(?=</TAG><TAG>)
于 2013-01-06T13:03:14.250 回答