如何使用 python 正则表达式从给定字符串 select 仅 numbers/digits 并跳过文本?

How to select only numbers/digits from a given string and skip text using python regex?

给定的字符串:

57 岁 67 天 1789 年 4 月 30 日

61 岁 125 天 1797 年 3 月 4 日

57 年 325 天 1801 年 3 月 4 日

57 岁 353 天 1809 年 3 月 4 日

58 岁 310 天 1817 年 3 月 4 日

在正则表达式 101 中:

模式=(?P<Years>[\d]{1,2}) years, (?P<Days>[\d]{1,3}) days(?P<Month>[\w]{3} [\d]{1,2}), (?P<Year>[\d]{4})

输出: Output of Regex Pattern

在Python中(IDE:Jupyter笔记本): Python Output 这里它在数据框中只显示 nan 值,如何解决这个问题?

使用:

#Preparing data
string = """57 years, 67 daysApr 30, 1789
61 years, 125 daysMar 4, 1797
57 years, 325 daysMar 4, 1801
57 years, 353 daysMar 4, 1809
58 years, 310 daysMar 4, 1817"""
df = pd.DataFrame(string.split('\n'))

#Solution
temp = df[0].str.extractall('(?P<Years>[\d]{1,2}) years, (?P<Days>[\d]{1,3}) days(?P<Month>[\w]{3} [\d]{1,2}), (?P<Year>[\d]{4})')

输出:

        Years   Days    Month   Year
match               
0   0   57  67  Apr 30  1789
1   0   61  125 Mar 4   1797
2   0   57  325 Mar 4   1801
3   0   57  353 Mar 4   1809
4   0   58  310 Mar 4   1817

仅供参考,您的代码 运行 非常适合我,也许您的数据框中存在一些空白问题:

import pandas as pd
import numpy as np

from io import StringIO

st = StringIO("""57 years, 67 daysApr 30, 1789

61 years, 125 daysMar 4, 1797

57 years, 325 daysMar 4, 1801

57 years, 353 daysMar 4, 1809

58 years, 310 daysMar 4, 1817""")

df = pd.read_csv(st, sep='\s\s\s+', header=None, engine='python')

Pattern = '(?P<Years>[\d]{1,2}) years, (?P<Days>[\d]{1,3}) days(?P<Month>[\w]{3} [\d]{1,2}), (?P<Year>[\d]{4})'

df[0].str.extract(Pattern)

输出:

  Years Days   Month  Year
0    57   67  Apr 30  1789
1    61  125   Mar 4  1797
2    57  325   Mar 4  1801
3    57  353   Mar 4  1809
4    58  310   Mar 4  1817