Python3.7:RegEx用于多行字符串之间的字符串吗?

时间:2018-10-05 09:29:14

标签: python regex python-3.x

我想在以下位置找到30,850

  <div class='user-information__achievements-heading' data-test-points-title>
    Points
    </div>
    <div class='user-information__achievements-data' data-test-points-count>
    30,850
    </div>
    </div>

具有:

^(?!<div class='user-information__achievements-data' data-test-points-count>
|<.div>)(.*)$

(不返回任何内容)

^(?!START\-OF\-FIELDS|END\-OF\-FIELDS)(.*)$的工作原理是什么:

START-OF-FIELDS
<div>
Line A
END-OF-FIELDS

(返回<div>)?

4 个答案:

答案 0 :(得分:1)

如果您只有这段文字并且需要快速re.search,那么我完全同意never parse HTML with re(并且非常有趣,顺便说一句),简单的r'\d+,\d+'就可以了...:

import re

s = '''<div class='user-information__achievements-heading' data-test-points-title>
    Points
    </div>
    <div class='user-information__achievements-data' data-test-points-count>
    30,850
    </div>
    </div>'''

re.search(r'\d+,\d+', s)
<re.Match object; span=(179, 185), match='30,850'>

答案 1 :(得分:1)

不需要正则表达式就可以做到:

i="    <div class='user-information__achievements-data' data-test-points-count>"
print(s.splitlines()[s.splitlines().index(i)+1].lstrip())

输出:

30,850

答案 2 :(得分:1)

您还可以通过bs4搜索文本

sudo pip install awscli --ignore-installed six

答案 3 :(得分:0)

您想要re.DOTALL,因为默认情况下.与换行符和行制动器不匹配。

re.compile(YOUR_REGEX, flags=re.S)

您也可以在(?s)之前添加正则表达式,以达到相同的效果。