【问题标题】:Regex through a string with Python 2.7使用 Python 2.7 通过字符串进行正则表达式
【发布时间】:2015-03-15 15:36:57
【问题描述】:

我目前在 BeautifulSoup4 中处理的 HTML 响应中包含以下内容:

<script type="text/javascript">
var n='eut';
var u='user'+'/8/'+'41140658'+n.charAt(2)+n.charAt(0)+n.charAt(1);
document.getElementById('big_pic').src='http://b2.eu.album.com/'+u.charAt(0)+'/'+u+'.jpg';
</script>

我想要实现的是能够提取成功的字母('big_pic').src='http://,在这种情况下,是字母'b'

我已经尝试了以下,但我只是不知道如何在字符串之后返回字母:-

my_string = str(re.findall(r'('big_pic').src='http://', the_string))

如何返回字符串中“http://”之后的字母?

【问题讨论】:

    标签: python regex beautifulsoup


    【解决方案1】:

    您可以使用积极的后视:

    >>> re.search(r"(?<=\('big_pic'\)\.src='http://).", the_string).group(0)
    'b'
    

    findall 将返回一个包含所有匹配项的数组:

    >>> re.findall(r"\('big_pic'\)\.src='http://(.)", the_string)
    ['b']
    

    所以在使用findall 时,您还应该注意进行您想要的匹配。

    【讨论】:

    • 谢谢,更简单了
    【解决方案2】:

    您的实现中有几个错误。

    首先,如果您知道要查找的确切字符串,为什么要使用正则表达式?您可以简单地搜索字符串。 使用开始您的字符串的索引和您要查找的字符串的长度,您可以简单地在您想要的位置检索字符。

    其次,您使用单引号作为字符串的开头和字符串中的引号,它甚至不应该在没有错误的情况下运行(除非错误仅在您将其发布到此处时)

    进行这些更改,您的代码将如下所示:

    idx = the_string.find(r"('big_pic').src='http://")
    if idx > -1:
            my_string = the_string[idx+24:idx+25]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-16
      • 1970-01-01
      • 1970-01-01
      • 2016-05-04
      • 2016-08-30
      • 1970-01-01
      • 2020-05-05
      • 1970-01-01
      相关资源
      最近更新 更多