繁体   English   中英

从python中的字符串中删除前导文本字符

[英]Removing leading text characters from string in python

import pandas as pd
import re
df = pd.DataFrame({'fix_this_field':['dogstreet 1234, st, texas 57500', 'animal hospital of dallas, 233 medical ln '], 'needed solution':['1234, st texas 57500', '233 medical ln']})
df #look what i want

我想在第一个数字后提取所有数据,包括数字。 请参阅dataframe中的解决方案列。 所以像'hospital2019 lane'这样的东西会成为'2019 lane'。

我试着沿着下面的东西看一些东西,但我正在挣扎着撞在墙上。 请让我知道我的方式的错误。

x = 'hospital2019 lane'
r = re.compile("^([a-zA-Z]+)([0-9]+)")
m = r.match(x)
m.groups()
# it stops at 2019.   I want 2019 lane.....('hospital', '2019')

使用split轻松实现

df.fix_this_field.str.split('(\d)',1).str[1:].apply(''.join)
Out[475]: 
0    1234, st, texas 57500
1          233 medical ln 
Name: fix_this_field, dtype: object
df['col']=df.fix_this_field.str.split('(\d)',1).str[1:].apply(''.join)

如果你必须使用正则表达式,下面是一个尝试:

  • 正则表达式: (?:[a-zA-Z ])([0-9]+.*)
reg = re.compile('(?:[a-zA-Z ,])([0-9]+.*)')

def clean(col):
    return re.findall(reg, col)[0] if re.findall(reg, col) else None

df.fix_this_field.apply(clean)

Out[1]:
0    1234, st, texas 57500
1          233 medical ln 
Name: fix_this_field, dtype: object

我找到了df.fix_this_field.apply(lambda x: x[re.search("\\d",x).start():])df.fix_this_field.apply(lambda x: ''.join(re.split('(\\d)',x,1)[1:]))几倍于df.fix_this_field.str.split('(\\d)',1).str[1:].apply(''.join)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM