【问题标题】:Regex expression to extract From & To Date?正则表达式提取从和到日期?
【发布时间】:2020-09-21 17:06:24
【问题描述】:

我正在尝试使用正则表达式从单独的组中提取和提取年份,但由于格式不同而无法提取,如下所示。 应用正则表达式:([0-9]+)-?([0-9a-z]+)

以下是需要提取的完整数据:

['165-180 A.D.',
 '1520-unknown',
 '1665',
 '1817-1923',
 'Late 1800s',
 '1918-1920',
 '1957-1958',
 '2009']

上面的正则表达式提取165,1520,166在组1和2019,unknown,5在组2。需要把1665放在group1和group2的空白字段正则表达式。 同样是 1800 年代后期的 group1

wp_page = requests.get("https://www.washingtonpost.com/graphics/2020/local/retropolis/coronavirus-deadliest-pandemics/")
wp_soup = bs(wp_page.content, 'html.parser')

[names.get_text() for  names in wp_soup.find_all('h5')][0:-2]

wp_year_from_list=[]
wp_year_to_list=[]
wp_year_regex=re.compile('([0-9]+)-?([0-9a-z]+)')
for names in wp_soup.find_all('h5'):
    if (wp_year_regex.search(names.text)!= None):
        wp_year_from_list.append(wp_year_regex.search(names.text).group(1))
        wp_year_to_list.append(wp_year_regex.search(names.text).group(2))```

【问题讨论】:

  • 能否请您提供您的代码和结果,以便其他人可以重现您的问题?谢谢!
  • @mozart_kv467 用代码更新帖子
  • 感谢@Mandy8055,这正是我所需要的。

标签: python python-3.x regex web-scraping list-comprehension


【解决方案1】:

在第二组中使用* 以获得所需的结果。

([0-9]+)-?([0-9a-z]+)*
                     ^^

【讨论】:

  • 这也是获得OP预期结果的一种方式。+1
【解决方案2】:

根据您的要求,您需要为第二组添加 ? 量词。所以你的正则表达式看起来像:

([0-9]+)-?([0-9a-z]+)?
                     ^^

上述正则表达式的解释:

([0-9]+) - 捕获数字 1 次或更多次的捕获组。

-? - 匹配连字符 0 次或 1 次。

([0-9a-z]+)? - 第二个捕获组捕获数字和字母1次或多次,该组可以出现0次或1次。

你可以在here.找到上述正则表达式的demo

【讨论】:

    猜你喜欢
    • 2015-01-12
    • 1970-01-01
    • 1970-01-01
    • 2017-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多