【问题标题】:Extracting part of string that came from beautifulsoup提取来自beautifulsoup的部分字符串
【发布时间】:2019-01-13 14:41:44
【问题描述】:

我有这个来自 BeautifulSoup 的字符串:

<span class="move-text-component vertical-move-list-clickable"><!-- -->

 abc6

 <!-- --> <!-- --></span>

我如何提取 abc6 文本知道它可以是任何带有 2-6 个字符/数字/连字符的子字符串(字符都大写而不是大写),我认为它后面和之后总是有一个换行符在这里。
我怎样才能使用您认为合适的任何方法来做到这一点? (正则表达式、beautifulsoup 等)

编辑:这是打印为列表以显示\n个字符的确切字符串:

['<span class="move-text-component vertical-move-list-clickable"><!-- -->\n\n  d4\n\n  <!-- --> <!-- --></span>']

【问题讨论】:

  • span 之前真的有一个点还是一个错字?
  • 不,第二部分有 /。这不是错字,我之所以写它是因为没有它,stackoverflow 会在代码中使用它并且无法正确显示。最后应该是
  • 然后edit it相应
  • this 你可以吗?
  • 那个不能正常工作。但是@pirate 的答案运行良好。无论如何,感谢您的网站参考似乎很有用。

标签: python regex python-3.x string


【解决方案1】:

你可以用正则表达式做到这一点:

<.+>\n\n(.+)\n\n<.+>

并提取()中的组

在 Python 中你必须这样写:

import re
re.search(".+\n\n(.+)\n\n.+", text).group(1)

. 匹配任何字符
+ 匹配一次到无限次
() 是选择组
最后的.group(1) 是取() 中的第一个匹配项

【讨论】:

  • @pirateSomehow 这使得 noneType 没有属性组。确切的字符串是: ['\n\n d4\n\n '] 你能详细解释一下组和“.+”是如何工作的吗?
  • 是的,新的成功了!谢谢,如果你有时间,你能不能简单解释一下,以便我能更好地理解它? .+ 和 group(1) 部分
  • 另外,有没有办法在 re.search 期间在所选文本的开头结束空格?而不是在之后切片字符串。
  • @Miguel 您可以在正则表达式中使用 \s 添加空格,如下所示:.+\n\n\s+(.+)\n\n.+
  • 这是正确的,但我认为这会使任务复杂化。 BeautifulSoup 拥有无需使用正则表达式即可获取数据的工具 :)
【解决方案2】:

除了 BeautifulSoup,您不需要其他工具。只需使用 .text.strip() :)

from bs4 import BeautifulSoup

source = """
<span class="move-text-component vertical-move-list-clickable"><!-- -->\n\n  d4\n\n  <!-- --> <!-- --></span>
"""
soup = BeautifulSoup(source, 'lxml')

data = soup.find('span', class_ ="move-text-component vertical-move-list-clickable")

print(data.text.strip())

结果

【讨论】:

    猜你喜欢
    • 2021-02-21
    • 2020-12-18
    • 1970-01-01
    • 1970-01-01
    • 2012-04-01
    相关资源
    最近更新 更多