Python 在html中查找dd.mm.yyyy

Python 在html中查找dd.mm.yyyy,python,regex,Python,Regex,我正在尝试在html源中查找格式为dd.mm.yyyy的所有日期,例如: <span id="publisher" itemprop="Publisher" data-source="LE MONDE">Le Monde</span> | <time datetime="2018-05-30T10:44:42+02:00" itemprop="datePublished">30.05.2018 &agrave; 10h

我正在尝试在html源中查找格式为dd.mm.yyyy的所有日期,例如:

     <span id="publisher" itemprop="Publisher" data-source="LE MONDE">Le Monde</span>
 |    <time datetime="2018-05-30T10:44:42+02:00"
        itemprop="datePublished">30.05.2018 &agrave; 10h44</time>
 • Mis à jour le
<time datetime="2018-05-31T13:54:38+02:00"
        itemprop="dateModified">31.05.2018 &agrave; 13h54</time>
        |
<span class="signature_article">
Par      <span itemprop="author" class="auteur txt2_120">            <a class="auteur" target="_blank" href="/journaliste/anne-sophie-faivre-le-cadre/">Anne-Sophie Faivre Le Cadre</a>
        </span>
</span>

</p>
对字符串“ajhajashsja 31.05.2018”有效的,对上面包含相同日期的html无效。为什么


非常感谢您的帮助

请尝试以下内容,并告诉我这是否有助于获取YYYY-MM-DD格式

2[0-9]{3}-(0[1-9])|(1[1-2])-([0-2][0-9])|([3][01])
如果是DD-MM-YYYY,请使用以下内容

([0-2][0-9])|([3][01])-(0[1-9])|(1[1-2])-2[0-9]{3}

或者使用
\.
代替上面的
-
,以防文本中包含

删除模式开头的胡萝卜
^
,因为这只会在行首找到匹配项

^在行首断言位置


您可以使用python的正则表达式模块

import re
a = """
<span id="publisher" itemprop="Publisher" data-source="LE MONDE">Le Monde</span>
 |    <time datetime="2018-05-30T10:44:42+02:00"
        itemprop="datePublished">30.05.2018 &agrave; 10h44</time>
 • Mis à jour le
 <time datetime="2018-05-31T13:54:38+02:00"
        itemprop="dateModified">31.05.2018 &agrave; 13h54</time>
        |
 <span class="signature_article">
 Par      <span itemprop="author" class="auteur txt2_120">            <a class="auteur" target="_blank" href="/journaliste/anne-sophie-faivre-le-ca
dre/">Anne-Sophie Faivre Le Cadre</a>
         </span>
 </span>

 </p>
 """
match=re.findall(r'(\d{2,2}.\d{2,2}.\d{4,4})',a)
print match
['30.05.2018', '31.05.2018']
重新导入
a=”“”
世界报
|2018年5月30日à;10时44分
•米沙焦耳
2018年5月31日à;13h54
|
标准杆数

""" match=re.findall(r'(\d{2,2}.\d{2,2}.\d{4,4}),a) 打印匹配 ['30.05.2018', '31.05.2018']
match将包含所有匹配字符串的数组

请尝试使用此字符串。我在学校考试

使用以下命令:-

import re

#documentString is the string representing your html text.
print re.findall(r"[\d]{1,2}\.[\d]{1,2}\.[\d]{4}", documentString ,re.MULTILINE)
输出:

['30.05.2018', '31.05.2018']
您的正则表达式((?:19 | 20)\d{2})匹配任何以无空格或某些空格开头的行,然后立即匹配所需的日期,然后以无空格或某些空格结束

这个问题是由“没有空格或有空格,然后立即”引起的。删除开头的
^
将解决问题,因为您的测试用例既不包含行开头的日期,也不包含某些空格之后的日期

编辑:根据我的测试,我找不到与问题结尾对应的任何结果

对字符串“ajhajashsja 31.05.2018”起作用


我不知道这是我的编码错误还是问题的原因。

你需要从
改为
\
。因为一个点意味着任何字符,所以通过转义它,你会告诉正则表达式匹配精确的点本身。当然,这会匹配提问者正在寻找的内容,但它会匹配很多他没有寻找的内容,同样感谢RavindersingH13基于询问者的例子,他希望只匹配有效日期,并使世纪前缀可选(至少只要是19或20)。这将比这匹配得多。@glibdud,我同意这是一个有效点,如果需要,regex可以相应调整。但是,用户在这个问题中没有要求任何与年份范围或其他相关的内容。与其他几个答案一样,这将比询问者要寻找的内容(看起来像日期但无效的内容)更匹配,并且不允许世纪前缀像他试图做的那样是可选的。不完全理解,asker正在查找与格式
dd.mm.yyyyy
匹配的所有日期,这就是上面的代码所做的。与其他几个答案一样,这将比asker所查找的(看起来像日期但无效的内容)更匹配,并且不允许世纪前缀像他试图做的那样是可选的。@glibdud,现在怎么样?请一定要让我知道?更好,不过我想你需要在每个组周围多加一些参数来界定
操作符的范围。@glibdud,当然很酷,请随意编辑它以使这篇文章更好。
import re

#documentString is the string representing your html text.
print re.findall(r"[\d]{1,2}\.[\d]{1,2}\.[\d]{4}", documentString ,re.MULTILINE)
['30.05.2018', '31.05.2018']