如何使用 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
给定的字符串:
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