python - 正则表达式 - 通过改变中间值从 HTML 中获取值(value)

标签 python regex

我正在尝试对 Twitter 链接的末尾进行正则表达式,其中唯一的标识符是类值 fl。因此,正则表达式(据我所知)必须包括:

class=\"fl\"

考虑更改中间部分,其中\S+ 不起作用,然后查找并分组:

 data-href="http://www.twitter.com/(newyorklife)

该组位于括号中。我试图解析的整个字符串是。

<g-link class="fl"><a href="/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=32&amp;cad=rja&amp;uact=8&amp;ved=0ahUKEwjknIy87oHWAhXHi1QKHXQdAJsQ9zAIyQEwHw&amp;url=http%3A%2F%2Fwww.twitter.com%2Fnewyorklife&amp;usg=AFQjCNHKcAcw6H6cYG3YH1j4V3UOxX1whw" onmousedown="return rwt(this,'','','','32','AFQjCNHKcAcw6H6cYG3YH1j4V3UOxX1whw','','0ahUKEwjknIy87oHWAhXHi1QKHXQdAJsQ9zAIyQEwHw','','',event)" data-href="http://www.twitter.com/newyorklife"><div jsl="$t t-XNwoAoU5dyo;$x 0;" class="r-iBA3fWkVHWLE"><g-img class="_tek"><img id="uid_4" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAABZUlEQVR4AWLQWfWQpmjUAjxo1IJRC2wBpJTDQkVRFIafKBujZrnGjbNd84wHiJNs27btrm3rrFbW1T73m20u/yMsW0cBg6zue5XCYLFQcC41JK0I3PsYaWvC+BkugYFljrbmWPp/H/86FOnhB2hGZbTg/dBhFoEBhsoEAO23Su9+5s/9nA0R/ANtXEgNJTtiAgObfB28gZaKt8Wen2ZarhRgjVL8nagGmetC+IFMb5lgqOtOZAtsLVgjcIhFZqD+RLYj0IFzGCwUcRctc7XgNNcyA7GBhAW+EWvnHK3XCjqDhg3OUpvAEegFTgAdA+nrwnuF4zCw7DSlwqOPscRxUAmtiYqY5NDXImz/6mPprlAP1sDgcjdFLokdCkPGW6Kstmbhtoim2IWNsRsvFXNsjURvBmvgiMROc11S0+BhVvmhFAUDhewrISgbg4/qlyUdeEnl+sBk7SOgfcBSb3jWaKMWjFoAABKespvtvzYlAAAAAElFTkSuQmCC" data-deferred="1" class="_WCg" height="32" width="32" alt="" onload="typeof google==='object'&amp;&amp;google.aft&amp;&amp;google.aft(this)"></g-img></div>Twitter</a></g-link>

我不知道正则表达式是否有方法或者可以跳过带有这么多特殊字符的整个中间部分。我在 pythex.org 上玩了一段时间,找不到一种方法,它只是找到一个初始值,然后跳过所有内容,直到......指定的值。有任何想法吗?

编辑。我想要字符串“Newyorklife”作为输出。虽然这是一个不断变化的值,所以实际上我只想要 twitter.com/之后的\w+ 。问题是 class=fl 是网页上该行的唯一唯一标识符(因为 twitter 和 data-href 显示在页面上的其他位置)。

最佳答案

有一种方法可以在一个正则表达式字符串中完成此操作,但它会很丑并且难以阅读。所以我会分两步来解决这个问题。首先,捕获类为“fl”的 HTML 标签,然后在属性中找到 Twitter 句柄。

str = document.documentElement.innerHTML;

anchorTag = str.match( "class=\"fl\">([^>]+)" )[1];

matches = anchorTag.match("twitter\.com%2F([^&]+)&");
if( matches != null && matches.length > 1 ){
    var handle = matches[1];
}

console.log(handle);
<g-link class="fl"><a href="/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=32&amp;cad=rja&amp;uact=8&amp;ved=0ahUKEwjknIy87oHWAhXHi1QKHXQdAJsQ9zAIyQEwHw&amp;url=http%3A%2F%2Fwww.twitter.com%2Fnewyorklife&amp;usg=AFQjCNHKcAcw6H6cYG3YH1j4V3UOxX1whw" onmousedown="return rwt(this,'','','','32','AFQjCNHKcAcw6H6cYG3YH1j4V3UOxX1whw','','0ahUKEwjknIy87oHWAhXHi1QKHXQdAJsQ9zAIyQEwHw','','',event)" data-href="http://www.twitter.com/newyorklife"><div jsl="$t t-XNwoAoU5dyo;$x 0;" class="r-iBA3fWkVHWLE"><g-img class="_tek"><img id="uid_4" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAABZUlEQVR4AWLQWfWQpmjUAjxo1IJRC2wBpJTDQkVRFIafKBujZrnGjbNd84wHiJNs27btrm3rrFbW1T73m20u/yMsW0cBg6zue5XCYLFQcC41JK0I3PsYaWvC+BkugYFljrbmWPp/H/86FOnhB2hGZbTg/dBhFoEBhsoEAO23Su9+5s/9nA0R/ANtXEgNJTtiAgObfB28gZaKt8Wen2ZarhRgjVL8nagGmetC+IFMb5lgqOtOZAtsLVgjcIhFZqD+RLYj0IFzGCwUcRctc7XgNNcyA7GBhAW+EWvnHK3XCjqDhg3OUpvAEegFTgAdA+nrwnuF4zCw7DSlwqOPscRxUAmtiYqY5NDXImz/6mPprlAP1sDgcjdFLokdCkPGW6Kstmbhtoim2IWNsRsvFXNsjURvBmvgiMROc11S0+BhVvmhFAUDhewrISgbg4/qlyUdeEnl+sBk7SOgfcBSb3jWaKMWjFoAABKespvtvzYlAAAAAElFTkSuQmCC" data-deferred="1" class="_WCg" height="32" width="32" alt="" onload="typeof google==='object'&amp;&amp;google.aft&amp;&amp;google.aft(this)"></g-img></div>Twitter</a></g-link>

关于python - 正则表达式 - 通过改变中间值从 HTML 中获取值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45987157/

相关文章:

python - pylearn2 CSV数据集类型错误

python - 在 matplotlib 注释中添加一行

python - 正则表达式:如何使用正则表达式在可选捕获组之后捕获组?

c++ - 正则表达式与字符串 :find() for simple word boundary

mysql - 如何使用 REGEXP MySQL 函数查找超过 2 个点的电子邮件?

python minidom混合元素属性

java - Linux:无需安装即可运行 Python

javascript - {{csrf_token}} 给我 403 Forbidden 和 {%csrf_token%} 给我 500 服务器错误

javascript - 获取表数据之间有空格的表行文本

c# - 最多两个换行符