我已经结合python
模块和re
模块编写了一个脚本,用于解析网页中的某些内容。我想解析的内容:其中有些周围有空格,有些则没有。如何将它们全部包含在一个模式中。我尝试过的那个只能抓住周围有空格的地方。我使用正向后看和正向前看来获取它们。
我想使用正则表达式从下面的asked
中抓取文本html elements
。
import re
content = """
<div class="user-action-time">
asked <span title="2018-07-08 09:43:08Z" class="relativetime">2 hours ago</span>
</div>
<div class="user-action-time">asked<span title="2018-07-07 17:17:07Z" class="relativetime">18 hours ago</span>
</div>
<div class="user-action-time">
asked <span title="2018-07-06 20:35:48Z" class="relativetime">yesterday</span>
</div>
"""
pattern = re.compile(r'(?<=user-action-time">\s)(.*)(?=<span)')
for item in pattern.finditer(content):
print(item.group())
答案 0 :(得分:1)
在我的示例中,我提取了整个div的文本内容,以及如何仅提取div内部span的内容。我建议使用某种HTML解析器。我在示例中使用了lxml html,但还有很多其他方法。
nvidia-smi
答案 1 :(得分:0)
由于您想从字符串中捕获一个单词,即“询问”,因此,如果您一直希望抓住一个单词,则以下内容应该起作用
输入(在底部的打印语句中)
import re
content = """
<div class="user-action-time">
asked <span title="2018-07-08 09:43:08Z" class="relativetime">2 hours
ago</span>
</div>
<div class="user-action-time">asked<span title="2018-07-07 17:17:07Z"
class="relativetime">18 hours ago</span>
</div>
<div class="user-action-time">
asked <span title="2018-07-06 20:35:48Z"
class="relativetime">yesterday</span>
</div>
"""
print(re.findall('<div[\S\s]*?>[\s]*([\S]+?)[\s<]+', content))
输出
['asked', 'asked', 'asked']
。
。
现在,如果您需要捕获一个句子,则必须对正则表达式进行一些修改(我正在使用的正则表达式很脏,但是很有效-再次出现细微差别,具体取决于内容字符串,影响其性能)
输入句子(在底部的打印语句中)
import re
content = """
<div class="user-action-time">
asked my friend <span title="2018-07-08 09:43:08Z"
class="relativetime">2 hours
ago</span>
</div>
<div class="user-action-time">asked my dad<span title="2018-07-07 17:17:07Z"
class="relativetime">18 hours ago</span>
</div>
<div class="user-action-time"> asked my mom <span title="2018-07-07 17:17:07Z"
class="relativetime">18 hours ago</span>
</div>
<div class="user-action-time">
asked <span title="2018-07-06 20:35:48Z"
class="relativetime">yesterday</span>
</div>
"""
print(re.findall('<div[\S\s]*?>[\s]*([\S\s]+?[\S])[\s]*[<]+', content))
输出
['asked my friend', 'asked my dad', 'asked my mom', 'asked']
答案 2 :(得分:0)
似乎我自己做了。这就是我想要得到的:
pattern = re.compile('(?<=user-action-time">)(\s*?.*)(?=<span)')
for item in pattern.finditer(content):
print(item.group().strip())
输出:
asked
asked
asked